MySql总结学习

数据库设计规范
1.所有数据库对象名称必须使用小写字母并用下划线分割。  比如DbName  dbName是两个不同的数据库,不同的表名Table,tabLe,TABLE。
2.所有数据库对象名称禁止使用Mysql保留的关键字。比如from 作为了列名, 建立表的时候没问题,但是在查询的时候就会报错,这时候我们需要用''引起来就可以进行查询了。
3.数据库对象的命名要能做到见名识义,并且最好不要超过32个字符。
4.临时表必须以tmp为前缀并以日期为后缀。备份库,备表必须以bak为前缀并以日期为后缀。
5.所有存储相同数据的列名和列类型必须一致。
数据库基本设计规范
1.所有表必须使用Innodb存储引擎(理由1  5.6以后的默认引擎 理由2 支持事务,行级锁,更好的恢复性,高并发下性能更好。)
2.数据库和表的字符集统一使用UTF8。
3.所有表和字段都需要添加注释。
4.Mysql尽量控制单表数据量的大小,建议控制在500万以内(500W并不是MySQL数据库的限制)。
5.可以用历史数据归档,分库分表等手段来控制数据量的大小。
6.谨慎使用Mysql分区表。
7.尽量做到冷热数据分离,减少表的宽度(Mysql限制最多存储4096列)
8.禁止在表中建立预留字段。
9.禁止在数据库中储存图片,文件等二进制数据。
10.禁止在线上做数据库压力测试。
11.禁止从开发环境,测试环境直接连接生产环境数据库。
  索引设计规范
1.索引对数据库的查询性能来说是非常重要的。(双刃剑)
不要滥用索引。
2.限制每张表的索引数量,建议单张表索引不超过5个。
3.索引可以提高效率同样可以降低效率。索引可以增加查询效率,但同样也会降低插入和更新的效率。
4.禁止给表中的每一列都建立单独的索引。
5.Innodb是按照主键索引的顺序来组织表,
6.每个Innodb表必须有一个主键。
7.不适用更新频繁的列作为主键,不使用多列主键。
8.不使用UUID,MD5,HASH,字符串列作为主键。
9.最好使用能够保证自动增长的列作为主键(主键建议选择使用自增ID值)。
10.常见索引列建议
SELECT、UPDATE、DELETE语句的WHERE从句的列
包含在ORDER BY GROUP BY DISTINCT 中的字段
多表JOIN的关联列
11.
如何选择索引列的顺序
区分度最高的列放在联合索引的最左侧[区分度:表中列中唯一值的数量.(区分度最大的就是主键和唯一索引列)]
尽量把字段长度小的列放在联合索引的最左侧
使用最频繁的列放在联合索引的左侧
12.  四种索引(主键索引/普通索引/全文索引/唯一索引)
避免建立冗余索引和重复索引
primary key(id)  index(id)  unqiue index(id)
index(a,b,c) index(a,b) index(a)
13  题外。。。。
这个系统有一个会员表
有下列字段:
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT

那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
会员备注信息 , 如果需要建索引的话,可以选择 FULLTEXT,全文搜索。
注意:全文索引主要针对文本文件,比如文章,标题,全文索引只有MyISAM有效(mysql5.6之后InnoDB也支持了全文索引)
14.对于频繁查询的sql考虑覆盖索引(就是包含了所有查询字段的索引)
好处:避免innodb表进行索引的二次查找
可以把随机io变为顺序io加快查询效率.
15.尽量避免使用外键
不建议使用外键约束,但一定在表与表之间的关键键上建立索引
外键会影响父表和字表的写操作从而降低性能
数据库字段设计规范

1.字段类型的选择,会直接影响数据库的性能
2.优先选择符合存储需要的最小的数据类型
inet_aton('255.255.255.255') = 4264967295
inet_ntoa(4264967295) = ('255.255.255.255') 
3.VARCHER(N)中N代表的是字符数,而不是字节数
使用UTF8存储汉字varchar(255)=765个字节
4.过大的长度会消耗更多的内存
5.避免使用TEXT、BLOB类型
TinyText,Text,MidummText,LongText
6.避免使用ENNUM数据类型(在别的数据库中并不存在这种类型)
7.尽可能把所有列定义为NOT NULL(索引NULL列需要额外的空间来保存,所以要占用更多的空间)
8.字符串存储日期型的数据(不正确的做法)
用字符串存储日期要占用更多的空间
9.同财务相关的金额数据,必须使用decimal类型
10.Decimal类型为精准浮点数,在计算时不会丢失精度。
                                                                  数据库SQL开发规范
1.建议使用预编译语句进行数据库操作。
2.避免数据类型的隐式转换 (隐式转换会导致索引失效)
3.避免使用双%号的查询条件 
一个SQL只能利用到复合索引中的一列进行范围查询
使用left join 或not exists来优化not in 操作
4.程序连接不同的数据库使用不同的账号,禁止跨库查询
为数据库迁移和分库分表留出余地
5.禁止使用SELECT * 必须使用SELECT <字段列表>查询
消耗更多的CPU和IO以及网络带宽资源
无法使用覆盖索引
6.禁止使用SELECT * 必须使用SELECT <字段列表>查询
消耗更多的CPU和IO以及网络带宽资源
好处:减少表结构变更带来的影响
7.禁止使用不含字段列表的INSERT语句 比如insert into t_tab values('a,',123);
8.避免使用子查询,可以把子查询优化成join操作,子查询的结果集无法使用索引;子查询会产生临时表操作,如果子查询数据量大,会严重影响效率。
9.消耗过多的CPU及IO资源。
10.避免使用JOINS关联太多的表,MYSQL最多允许关联61个表,建议不超过5个,也会产生临时表。
11.减少同数据库的交互次数
12.使用in代替or  in的值不要超过500个  in操作也可以有效的利用索引。
13.禁止使用 order by rand()进行随机排序
14.WHERE从句中禁止对列进行排序函数转换和计算。对列进行函数转换或计算会导致无法使用索引。
where date(createtime)='20160901'   where createtime >='20160901'  and createtime<'20130902'
15.在明显知道不会有重复值的时候我们使用UNION ALL而不是使用UNION,UNION会把所有的数据放到临时表中后再进行去重操作。
16.拆分复杂的大SQL为多个小SQL。
数据库操作行为规范
1.超100W行的批量写操作,要分批多次进行操作
2.对大表数据结构的修改一定要谨慎,会造成严重的锁表操作。尤其是生产环境,是不能忍受的。
对于大表使用pt-inline-schema-change修改表结构。
3禁止为程序使用的帐号赋予super权限。super权限只能留给DBA处理问题的帐号使用。
4.对于程序连接数据库的帐号,遵循权限最小原则。
程序使用数据库帐号只能在一个DB下使用,不准跨库。程序使用的帐号原则上不准有drop权限。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值