公司用的 MySQL 团队开发规范,太详细了,建议收藏( 四 )


13、避免非必要的类型转换,字符串字段使用数值进行比较的时候会导致索引无效 。
14、模糊查询'%value%'会使索引无效,变为全表扫描,因为无法判断扫描的区间,但是'value%'是可以有效利用索引 。
15、索引覆盖排序字段,这样可以减少排序步骤,提升查询效率
16、尽量的扩展索引,非必要不新建索引 。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可 。
举例子:比如一个品牌表,建立的的索引如下,一个主键索引,一个唯一索引
1 PRIMARY KEY (`id`),2 UNIQUE KEY `uni_brand_define` (`App_id`,`define_id`)当你同事业务代码中的检索语句如下的时候,应该立即警告了,即没有覆盖索引,也没按照最左前缀原则:
1 select brand_id,brand_name from ds_brand_system where status=? and define_id=? and app_id=?建议改成如下:
1 select brand_id,brand_name from ds_brand_system where app_id=? and define_id=? and status=?  
约束设计规范1、PK应该是有序并且无意义的,由开发人员自定义,尽可能简短,并且是自增序列 。
2、表中除PK以外,还存在唯一性约束的,可以在数据库中创建以“uk_”作为前缀的唯一约束索引 。
3、PK字段不允许更新 。
4、禁止创建外键约束,外键约束由程序控制 。
5、如无特殊需要,所有字段必须添加非空约束,即not。
6、如无特殊需要,所有字段必须有默认值 。
 
SQL使用规范select 检索的规范性1、尽量避免使用select *,join语句使用select *可能导致只需要访问索引即可完成的查询需要回表取数 。
一种是可能取出很多不需要的数据,对于宽表来说,这是灾难;一种是尽可能避免回表,因为取一些根本不需要的数据而回表导致性能低下,是很不合算 。
2、严禁使用 select * from t_name ,而不加任何where条件,道理一样,这样会变成全表全字段扫描 。
3、MySQL中的text类型字段存储:
3.1、不与其他普通字段存放在一起,因为读取效率低,也会影响其他轻量字段存取效率 。
3.2、如果不需要text类型字段,又使用了select *,会让该执行消耗大量io,效率也很低下
4、在取出字段上可以使用相关函数,但应尽可能避免出现 now , rand , sysdate 等不确定结果的函数,在Where条件中的过滤条件字段上严禁使用任何函数,包括数据类型转换函数 。大量的计算和转换会造成效率低下,这个在索引那边也描述过了 。
5、分页查询语句全部都需要带有排序条件 , 否则很容易引起乱序
6、用in/union替换or,效率会好一些,并注意in的个数小于300
7、严禁使用%前缀进行模糊前缀查询:如:select a,b,c from t_name where a like ‘%name’; 可以使用%模糊后缀查询如:select a,b from t_name where a like ‘name%’;
8、避免使用子查询,可以把子查询优化为join操作
通常子查询在in子句中,且子查询中为简单SQL(不包含union、group by、order by、limit从句)时,才可以把子查询转化为关联查询进行优化 。
子查询性能差的原因:
·子查询的结果集无法使用索引,通常子查询的结果集会被存储到临时表中,不论是内存临时表还是磁盘临时表都不会存在索引,所以查询性能 会受到一定的影响;
·特别是对于返回结果集比较大的子查询,其对查询性能的影响也就越大;
·由于子查询会产生大量的临时表也没有索引,所以会消耗过多的CPU和IO资源,产生大量的慢查询 。
 
操作的规范性1、禁止使用不含字段列表的INSERT语句
如:insert into values ('a','b','c'); 应使用 insert into t_name(c1,c2,c3) values ('a','b','c');。
2、大批量写操作(UPDATE、DELETE、INSERT),需要分批多次进行操作
·大批量操作可能会造成严重的主从延迟,特别是主从模式下,大批量操作可能会造成严重的主从延迟,因为需要slave从master的binlog中读取日志来进行数据同步 。
·binlog日志为row格式时会产生大量的日志
 
程序上的约束后续我们团队的目标是研发评审工具对开发同学提交的建库、建表、刷数据、查询的语句进行分析,看看是否符合应有的规范 。如果不符合,驳回修改 。




推荐阅读