mysql索引失效的原因
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,小编给大家分享一下mysql索引失效的原因,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!索引对于MySQL而言,是非常重要的篇章。索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,
千家信息网最后更新 2025年01月22日mysql索引失效的原因
小编给大家分享一下mysql索引失效的原因,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
索引对于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';
1、违反最左前缀法则
如果索引有多列,要遵守最左前缀法则即查询从索引的最左前列开始并且不跳过索引中的列explain select * from user where age = 20 and phone = '18730658760' and pos = 'cxy';
2、在索引列上做任何操作
如计算、函数、(自动or手动)类型转换等操作,会导致索引失效从而全表扫描explain select * from user where left(name,5) = 'zhangsan' and age = 20 and phone = '18730658760';
3、索引范围条件右边的列
索引范围条件右边的索引列会失效explain select * from user where name = 'zhangsan' and age > 20 and pos = 'cxy';
4、尽量使用覆盖索引
只访问索引查询(索引列和查询列一致),减少select*explain select name,age,pos,phone from user where age = 20;
5、使用不等于(!=、<>)
mysql在使用不等于(!=、<>)的时候无法使用索引会导致全表扫描(除覆盖索引外)explain select * from user where age != 20;explain select * from user where age <> 20;
6、like以通配符开头('%abc')
索引失效explain select * from user where name like '%zhangsan';
索引生效explain select * from user where name like 'zhangsan%';
7、字符串不加单引号索引失效
explain select * from user where name = 2000;
8、or连接
少用orexplain select * from user where name = '2000' or age = 20 or pos ='cxy';
9、order by
正常(索引参与了排序)explain select * from user where name = 'zhangsan' and age = 20 order by age,pos;备注:索引有两个作用:排序和查找
导致额外的文件排序(会降低性能)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;//含非索引字段
10、group by
正常(索引参与了排序)explain select name,age from user where name = 'zhangsan' group by age;备注:分组之前必排序(排序同order by)
导致产生临时表(会降低性能)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> show create table user \G****************************************************** Table: userCreate 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索引失效的原因有了一定的了解,想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
索引
前缀
法则
排序
知识
查询
原因
右边
备注
字段
性能
条件
知识点
篇文章
范围
顺序
透彻
重要
一致
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
linux网站服务器防护
sql最高能附加多大数据库
4.29网络安全日 第一届
关于网络安全的作文600
测试需掌握的数据库知识
奇迹mu数据库分析
网络安全内容 六年级
北京常见软件开发代理价格
长宁区创新数据库服务商收费标准
华为信息与网络技术学院电话
阳江app软件开发解决方案
汽车上为什么要发展网络技术
福建党员党性体检软件开发
中国5g网络技术推进委员会
云服务器管理员密码
宁波自动量化交易软件开发培训
网络安全相关规定
山西dns服务器托管云主机
应用多的软件开发
数据库行转列动态字段
雨天视频软件开发
网络安全保护备案
泰安联想服务器哪家是专业做的
软件开发进度表英文
timertask数据库
电商对账数据库设计
长沙有哪些互联网科技公司
网络安全大纲征文大纲
关于网络安全责任书
苏宁软件开发干到多大