首页 > 其他 > 详细

索引规范及优化小细节

时间:2020-09-10 13:08:33      阅读:79      评论:0      收藏:0      [点我收藏+]

索引规范

1.业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引;

-> 尽量使用非空的唯一索引,尽量使用与业务无关的代理主键。

2.在varchar,text等长字符串类型字段上建立索引时,必须指定索引长度(前缀索引),没必要对全字段建立索引,根据实际文本区分度决定索引长度即可;

-> 使用select count(distinct left(列名, 索引长度))/count(*) from table测试确定索引的大概长度。

3.更新频繁,数据区分度不高的字段不适合建索引;

注:区分度可以select count(distinct(列名))/count(*) from table来查询,一般来说,区分度达到80%就可以建索引。

4.创建索引的列,应该不允许为null,可能会得到不符合预期的结果;

5.建组合索引的时候,区分度最高的字段在最左边 ;

-> 最左匹配原则。

6.单表索引建议控制在5个以内;

7.对于组合索引来说,组合字段数不要超过5个;

8.存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置;

9.创建索引的时候应该避免以下错误概念:

索引越多越好;

过早优化,在不了解系统的情况下进行优化。

优化原则

1.使用索引列进行查询的时候不要使用表达式,把计算放到业务层而不是数据库层;

2.超过三个表禁止 join,需要 join 的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引;

3.利用覆盖索引来进行查询操作,避免回表;

4.利用延迟关联或者子查询优化超多分页场景;

5.尽量使用主键作为条件查询,而不是其他索引,因为主键查询不会触发回表查询;

6.页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决

-> 最左前缀匹配原则,‘%xxx‘或者‘%xxx%‘会导致索引失效。

7.如果有order by的场景,请注意利用索引的有序性,order by最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况,影响查询性能;

8.union all,in,or都能够命中索引,但是推荐使用in;

9.范围查询可以用到索引;

10.强制类型转换会导致索引失效,从而全表扫描;例如:把整型强制转换为字符串;

11.能使用limit的时候尽量使用limit;

12.SQL性能优化的目标:至少要达到range级别,要求是ref级别,如果可以是const最好;

索引规范及优化小细节

原文:https://www.cnblogs.com/merson1314/p/13644670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!