开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散
这几天在写索引,想到一些有意思的TIPS,欲望大年夜家有收成。
一、一些常见的SQL实践
(1)负向前提萌芽不克不及应用索引
not in/not exists都不是好习惯
可以优化为in萌芽:
- select * from order where status in(2,3)
(2)前导模糊萌芽不克不及应用索引
而非前导模糊萌芽则可以:
- select * from order where desc like 'XX%'
(3)数据区分度不大年夜的字段不宜应用索引
- select * from user where sex=1
原因:性别只有男,女,每次过滤掉落的数据很少,不宜应用索引。
经验上,能过滤80%数据时就可以应用索引。对于订单状况,如不雅状况值很少,不宜应用索引,如不雅状况值很多,可以或许过滤大年夜量数据,则应当建立索引。
(4)在属性长进行计算不克不及射中索引
- select * from order where YEAR(date) < = '2017'
- select * from order where desc like '%XX'
即使date上建立了索引,也会全表扫描,可优化为值计算:
- select * from order where status!=0 and stauts!=1
- select * from order where date < = CURDATE()
或者:
- select * from order where date < = '2017-01-01'
二、并非周知的SQL实践
(5)如不雅营业大年夜部分是单条萌芽,应用Hash索引机能更好,例如用户中间