<span>MySQL--索引优化</span>

 

优化口诀:

全值匹配我最爱,最左前缀要遵守;

带头大哥不能死,中间兄弟不能断;

索引列上少计算,范围之后全失效;

Like百分写最右,覆盖索引不写星;

不等空值还有or,索引失效要少用;

VAR引号不可丢,SQL高级也不难!

 


 

“全值匹配我最爱”

 

“带头大哥不能死”,火车头可以单独跑,车厢不能单独跑

“最左前缀要遵守”,组合索引:name,Age,Pos,但是只有当最左侧的name存在时,索引才有效

 

“中间兄弟不能断”

Type=ref 绝对用到了索引

Possible_keys=idx_staffs_nameAgePos 可能用到了索引

Key = idx_staffs_nameAgePos 实际上用到的索引

但是是全职匹配的部分使用,因为如果用到了索引中的两个,key_len应该等于78,ref应该等于const,const

 

“范围之后全失效”,范围只能用到一部分排序,而不能用到查找

 

尽量使用覆盖索引,减少select *

 

在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

 

Is null ,is not null 也无法使用索引

 

百分like加右边

 

少用or,否则索引失效

 

索引最好怎么建的怎么用,这样避免mysql底层翻译和转换

 

字符串不加单引号索引失效

 

数据库会把2000隐式的自动的转换为String类型,但是在索引列上做任何操作(计算,函数,(自动or手动)类型转换),会使索引失效

 

问题:如何解决like‘%字符串%’时索引不被使用的方法?

答:使用覆盖索引,建的索引和查的字段个数顺序最好完全一致

 

 

全部评论

相关推荐

Java抽象带篮子:实习经历包装一下,可以看看我的包装贴
点赞 评论 收藏
分享
12-17 19:24
门头沟学院 Java
黑皮白袜臭脚体育生:看你后备隐藏能源多不多,最坏的情况就是每个星期的三天课程都不在周末,那么每个星期公司那边请一天半假,半天假请上午,上午正常上课,早点溜去请病假或者中午去请病假,然后坐高铁回公司,记得提前请学校那边实训课下午的病假,就说肚子痛,然后下午就公司上班,第二个实训周同样,但病假理由是牙齿痛,像肚子痛和牙齿痛这种校医院不方便查,会同意你出去检查的,很多时候都不需要你的检查报告,这里的问题就是最坏情况时距离过远的话可能要坐飞机才能赶上,然后请假的话不一定请了就有回应,可能要等老师,然后距离不远不近的情况到公司了也是迟到,得想个说辞掩盖一下,顺便晚上多加点班补下时间,特殊情况特殊处理,正常不建议加班常态化,这样每个星期可以多凑出来半天,老师面子也有了公司那边也不至于无法交差,就是有点费存粮,如果哪个星期的三天课有一天或两天在周末的话那就更好应对了。实习还是建议去,学校的课懂的都懂
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务