mysql 索引失效情况
2018-03-19 16:54
211 查看
基于MySQL5.5.33
![](//img-blog.csdn.net/20180319160028468?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
数据量:
![](//img-blog.csdn.net/20180319160312406?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
索引失效情况总结:
创建索引sql:ALTER TABLE `table_name` ADD INDEX index_name ( `column` ),表中先创建2个字段的普通索引
![](//img-blog.csdn.net/20180319160813132?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
1.sql语句中or的语句使用,执行sql:
1).生效
![](//img-blog.csdn.net/2018031916142516?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2).未生效
![](//img-blog.csdn.net/20180319161555389?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
总结:or的使用2边必须都是索引列,如果有一列不是,则索引无法生效,进行了全表扫描
2.like的使用:
1).生效
![](//img-blog.csdn.net/20180319162031351?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2).未生效:
![](//img-blog.csdn.net/20180319162114794?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](//img-blog.csdn.net/20180319162515750?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
总结:like的百分号不能写在前面,否则无法生效,进行全表扫描
3.索引列上进行计算:
1).生效
![](//img-blog.csdn.net/20180319162743886?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2).未生效
![](//img-blog.csdn.net/20180319162858434?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
总结:索引列上不能进行计算,可以将计算放到条件上
4.索引列是varchar类型
1).生效
![](//img-blog.csdn.net/20180319163452383?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2).未生效
![](//img-blog.csdn.net/20180319163517818?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
总结:索引列如果是varchar字符串类型,则必须加上''进行包含
5.组合索引:创建索引sql(ALTER TABLE `table_name` ADD INDEX index_name(`column`,`column`,`column`);),遵从最左前缀利用索引中最左边的列集来匹配行,这样的列称为最左前缀,例如由id,name,age3个字段构成的索引,索引行中按id/name/age的顺序存放,索引可以搜索下面字段组合:(id,name,age)、(id,name)、或者id。如果列不构成索引最左面的前缀,MySQL不能使用局部索引,如(age)或者(name,age)组合则不能使用索引查询
![](//img-blog.csdn.net/20180319164947666?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
1)生效:
![](//img-blog.csdn.net/2018031916503472?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](//img-blog.csdn.net/20180319165043742?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](//img-blog.csdn.net/20180319165053628?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](//img-blog.csdn.net/20180319165142932?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](//img-blog.csdn.net/2018031916515778?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2).未生效
1.未按照最左前缀的原则:
![](//img-blog.csdn.net/20180319165243512?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVp<br/>984c<br/>eGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](//img-blog.csdn.net/2018031916525749?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2.按照最左前缀使用or进行查询:
![](//img-blog.csdn.net/20180319165336729?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
3.遵从原则,在索引列上进行计算
![](//img-blog.csdn.net/20180319165420698?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3h1cGVpeGluNTIw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
数据量:
索引失效情况总结:
创建索引sql:ALTER TABLE `table_name` ADD INDEX index_name ( `column` ),表中先创建2个字段的普通索引
1.sql语句中or的语句使用,执行sql:
1).生效
2).未生效
总结:or的使用2边必须都是索引列,如果有一列不是,则索引无法生效,进行了全表扫描
2.like的使用:
1).生效
2).未生效:
总结:like的百分号不能写在前面,否则无法生效,进行全表扫描
3.索引列上进行计算:
1).生效
2).未生效
总结:索引列上不能进行计算,可以将计算放到条件上
4.索引列是varchar类型
1).生效
2).未生效
总结:索引列如果是varchar字符串类型,则必须加上''进行包含
5.组合索引:创建索引sql(ALTER TABLE `table_name` ADD INDEX index_name(`column`,`column`,`column`);),遵从最左前缀利用索引中最左边的列集来匹配行,这样的列称为最左前缀,例如由id,name,age3个字段构成的索引,索引行中按id/name/age的顺序存放,索引可以搜索下面字段组合:(id,name,age)、(id,name)、或者id。如果列不构成索引最左面的前缀,MySQL不能使用局部索引,如(age)或者(name,age)组合则不能使用索引查询
1)生效:
2).未生效
1.未按照最左前缀的原则:
2.按照最左前缀使用or进行查询:
3.遵从原则,在索引列上进行计算
相关文章推荐
- mysql索引失效的几种情况(总结)
- mysql 理解索引,添加索引,使用索引(哪些情况会导致索引失效)
- Mysql索引会失效的几种情况分析
- Mysql索引会失效的几种情况分析
- mysql索引总结(4)-MySQL索引失效的几种情况
- Mysql索引会失效的几种情况分析
- 【mysql】哪些情况下mysql索引会失效?
- mysql索引失效的几种情况
- mysql索引失效的五种情况分析
- Mysql索引会失效的几种情况分析
- MySQL 索引失效几种情况实战
- Mysql索引失效的情况
- MySQL索引失效的几种情况
- Mysql索引会失效的几种情况分析
- Mysql索引会失效的几种情况分析
- MySQL索引失效的几种情况
- MySQL索引失效情况分析
- Mysql索引会失效的几种情况
- MySql索引失效的例子和不适应添加索引的情况
- MySQL索引失效的几种情况