快盘下载:好资源、好软件、快快下载吧!

快盘排行|快盘最新

当前位置:首页软件教程电脑软件教程 → 【有料】一张图搞懂MySQL的索引失效

【有料】一张图搞懂MySQL的索引失效

时间:2022-09-21 10:20:34人气:作者:快盘下载我要评论
索引对于mysql而言;是非常重要的篇章。索引知识点也巨多;要想掌握透彻;需要逐个知识点一一击破;今天来先来聊聊哪些情况下会导致索引失效。

图片总结版

【有料】一张图搞懂MySQL的索引失效

全值匹配;索引最佳;

explain select * from user where name = ;zhangsan; and age = 20 and pos = ;cxy; and phone = ;18730658760;;

和索引顺序无关;MySQL底层的优化器会进行优化;调整索引的顺序
explain select * from user where name = ;zhangsan; and age = 20 and pos = ;cxy; and phone = ;18730658760;;

【有料】一张图搞懂MySQL的索引失效

1、违反最左前缀法则

如果索引有多列;要遵守最左前缀法则
即查询从索引的最左前列开始并且不跳过索引中的列
explain select * from user where age = 20 and phone = ;18730658760; and pos = ;cxy;;

【有料】一张图搞懂MySQL的索引失效

2、在索引列上做任何操作

如计算、函数、;自动or手动;类型转换等操作;会导致索引失效从而全表扫描
explain select * from user where left(name,5) = ;zhangsan; and age = 20 and phone = ;18730658760;;

【有料】一张图搞懂MySQL的索引失效

 

3、索引范围条件右边的列

索引范围条件右边的索引列会失效
explain select * from user where name = ;zhangsan; and age > 20 and pos = ;cxy;;

【有料】一张图搞懂MySQL的索引失效

 

4、尽量使用覆盖索引

只访问索引查询;索引列和查询列一致;;减少select*
explain select name,age,pos,phone from user where age = 20;

【有料】一张图搞懂MySQL的索引失效

 

5、使用不等于;!=、<>;

mysql在使用不等于;!=、<>;的时候无法使用索引会导致全表扫描;除覆盖索引外;
explain select * from user where age != 20;
explain select * from user where age <> 20;

【有料】一张图搞懂MySQL的索引失效

 【有料】一张图搞懂MySQL的索引失效

6、like以通配符开头;%abc;;

索引失效
explain select * from user where name like %zhangsan;;

【有料】一张图搞懂MySQL的索引失效

 

索引生效
explain select * from user where name like ;zhangsan%;

【有料】一张图搞懂MySQL的索引失效

 

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

explain select * from user where name = 2000;

【有料】一张图搞懂MySQL的索引失效

 

8、or连接

少用or
explain select * from user where name = ;2000; or age = 20 or pos =;cxy;;

【有料】一张图搞懂MySQL的索引失效

 

9、order by

正常;索引参与了排序;
explain select * from user where name = ;zhangsan; and age = 20 order by age,pos;
备注;索引有两个作用;排序和查找

【有料】一张图搞懂MySQL的索引失效

 

导致额外的文件排序;会降低性能;
explain select name,age from user where name = ;zhangsan; order by pos;//违反最左前缀法则
explain select name,age from user where name = ;zhangsan; order by pos,age;//违反最左前缀法则
explain select * from user where name = ;zhangsan; and age = 20 order by created_time,age;//含非索引字段

【有料】一张图搞懂MySQL的索引失效

【有料】一张图搞懂MySQL的索引失效

 【有料】一张图搞懂MySQL的索引失效

10、group by

正常;索引参与了排序;
explain select name,age from user where name = ;zhangsan; group by age;
备注;分组之前必排序;排序同order by;

【有料】一张图搞懂MySQL的索引失效

 

导致产生临时表;会降低性能;
explain select name,pos from user where name = ;zhangsan; group by pos;//违反最左前缀法则
explain select name,age from user where name = ;zhangsan; group by pos,age;//违反最左前缀法则
explain select name,age from user where name = ;zhangsan; group by age,created_time;//含非索引字段

【有料】一张图搞懂MySQL的索引失效

【有料】一张图搞懂MySQL的索引失效

 【有料】一张图搞懂MySQL的索引失效

使用的示例数据

mysql> show create table user G
******************************************************
       Table: user
Create Table: CREATE TABLE ;user; (
  ;id; int(10) NOT NULL AUTO_INCREMENT,
  ;name; varchar(20) DEFAULT NULL,
  ;age; int(10) DEFAULT ;0;,
  ;pos; varchar(30) DEFAULT NULL,
  ;phone; varchar(11) DEFAULT NULL,
  ;created_time; datetime DEFAULT NULL,
  PRIMARY KEY (;id;),
  KEY ;idx_name_age_pos_phone; (;name;,;age;,;pos;,;phone;)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

转自;mysql - 一张图搞懂MySQL的索引失效_个人文章 - SegmentFault 思否 

网友评论

快盘下载暂未开通留言功能。

关于我们| 广告联络| 联系我们| 网站帮助| 免责声明| 软件发布

Copyright 2019-2029 【快快下载吧】 版权所有 快快下载吧 | 豫ICP备10006759号公安备案:41010502004165

声明: 快快下载吧上的所有软件和资料来源于互联网,仅供学习和研究使用,请测试后自行销毁,如有侵犯你版权的,请来信指出,本站将立即改正。