网站首页 > 技术文章 正文
索引列上做操作导致索引失效
通常我们认为只要建立索引就可以万事大吉,以为只要建立就一定会使用到,可其实在索引列上的计算、函数、类型转换都可能导致索引失效,所以我们不仅要会创建索引,更重要的是如何正确的使用索引,且不让索引失效
查看表索引
mysql>show index from user;
我们看到user表中创建的是一个符合索引,索引顺序name、age、pos
案例分析
举例:两条sql语句查询出来的结果是一样的,但实际在mysql底层执行过程中效率确实完全不一致的
- 使用explain查看执行结果
mysql>explain select * from user where name="tim";
ref解释:表里面哪些字段走了索引(如果索引是主键或者唯一索引的话,会显示 const),最后选出了数据(选择行,一行一行的数据),连接不能基于关键字选择单个行,可能查找 到多个符合条件的行。 叫做 ref 是因为索引要 跟某个参考值相比较。这个参考值或者是一 个常数,或者是来自一个表里的多表查询的 结果值。
结论:从执行结果看,我们明显的使用到了索引(type=ref),且检索的行为1行,用到的ref为常量const
- 使用explain查看在所有列上计算的执行结果
mysql>explain select * from user where left(name,3)="tim";
结论:我们看到执行结果是没有使用到索引且是全表扫描(type=All),我们看到ref为NULL
建议:
1、作为一个资深的程序员,为了能和DBA配合默契,在实际生产环境中,我们写的每一条sql语句都需要我们自己explain查看执行结果,写出高效且执行效率最高的sql语句。
2、另外如果我们知道如何优化mysql且说出自己在实际生产环境中优化的案例,在面试过程中也会是加分项,这样有助于我们拿到高薪。
注意:切记不要在索引列上进行计算、函数、手动或自动的类型转换,这些都可能会是导致索引失效的元凶,可能我们在测试环境中数据量不大的情况下测试没有问题,可是数据量达到千万级别甚至更大的情况下执行效率就会显而易见,有可能因为一条特别慢的sql拖垮整个服务。
点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑
猜你喜欢
- 2024-10-28 MySQL查询为什么没走索引?这篇文章带你全面解析
- 2024-10-28 什么情况会导致 MySQL 索引失效?(mysql什么情况下会导致索引失效)
- 2024-10-28 用了索引一定就有用吗?如何排查?(使用索引)
- 2024-10-28 MySQL 索引优化分析:为啥你的SQL慢?为啥你建的索引常失效?
- 2024-10-28 MySQL基础(索引分析和使用)(mysql各种索引的使用场景)
- 2024-10-28 MySQL基础(其它SQL优化)(mysql数据库优化及sql调优)
- 2024-10-28 除了网络问题之外,即使对于数据量较小的表
- 2024-10-28 研究了 4.7 个小时终于了解到了索引使用了却没变快的原因
- 2024-10-28 MySQL索引失效带来的性能瓶颈:如何解决这个棘手问题?
- 2024-10-28 常见mysql索引失效条件(常见mysql索引失效条件是什么)
- 1517℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 594℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 521℃MySQL service启动脚本浅析(r12笔记第59天)
- 489℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 489℃启用MySQL查询缓存(mysql8.0查询缓存)
- 477℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 456℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 454℃MySQL server PID file could not be found!失败
- 最近发表
-
- PS所有滤镜的说明(六)(ps滤镜详解)
- 5款小白也能用的在线图片编辑器!电商效率飙升就靠它!
- Java变量(java变量有什么作用)
- Java面试常见问题:Java注解(java中的面试题)
- Java编程入门第一课:HelloWorld(java编程从入门到实践)
- Java基础教程:Java继承概述(java里继承的概述)
- java基础之——访问修饰符(private/default/protected/public)
- 如何规划一个合理的JAVA项目工程结构
- 将机器指令翻译成 JavaScript -- 终极目标
- Web 服务器基准测试:Go vs. Node.js vs. Nim vs. Bun
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)