理论
如果一个索引满足三星索引的三个条件就是最好的索引了
要满足哪三个条件才能称为三星索引呢?
1、索引的区分度很高
2、索引的排序和业务查询的排序相同
3、索引的字段完全满足查询的需要
实战
昨天接到一个朋友求助。说一个SQL很奇怪。加一个and like条件后 语句执行速度变慢了很多
我让他把执行计划发出来看看,执行计划为下
于是我问他 a.project_id列上没有索引吗?
得到的回复是有
他发了a表的索引情况出来
语句要优化就简单多了。直接给他说让语句强制走project_id 索引,速度肯定就快了
我们来分析一下为什么MySQL走错了索引。
从目前已有索引来说。 这个语句,要么满足上面的条件1区分度 走索引project_id ,要么满足条件2以排序为首先。 不可能两者都满足,而MySQL认为排序可能开销更大,所以选择了满足条件2
由于这个查询输出了很多a表字段,不太可能满足三星索引的条件3了,但我们可以让这个SQL满足三星的条件1与条件2
建立一个 project_id,report_time的联合索引 即可以有很好的区分度,索引的排序也正好是SQL的排序
结论
我们建索引的时候,一定想尽量满足上述三星索引的三个条件,但实际困难,但至少得满足其中一条,不然这个索引就没有什么意义
反过来。我们优化SQL的时候,也往三星索引思想上靠,就能优化好SQL了。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
这么强吗?那为啥不创建3个字段的索引 project_id,phone,report_time;有啥依据吗
2年前

5

2年前

评论

2年前

评论
⭐⭐⭐
2年前

评论
相关阅读
【专家观点】罗敏:从理论到真实SQL,感受DeepSeek如何做性能优化
墨天轮编辑部
1269次阅读
2025-03-06 16:45:38
SQLE 4.0 正式版发布,新增 SQL 重写、SQL 性能追踪、语法知识图谱等功能
爱可生开源社区
354次阅读
2025-03-07 10:30:00
当数据库管理平台 zCloud 遇到 DeepSeek,我一个10年的老DBA蚌埠住了
云和恩墨
184次阅读
2025-03-03 17:56:31
云和恩墨钟浪峰:安全生产系列之SQL优化安全操作
墨天轮编辑部
131次阅读
2025-03-31 11:08:20
降价46%,Hologres Serverless Computing 快速入门
阿里云大数据AI技术
100次阅读
2025-03-11 10:42:00
基于 MySQL 8.0 细粒度授权:单独授予 KILL 权限的优雅解决方案
GreatSQL
73次阅读
2025-03-05 14:32:50
拒绝玄学调优!科学分析精准狙击慢SQL
YashanDB
48次阅读
2025-03-28 15:02:10
“TA”说 | 资深架构师、DBA严少安:数据库开发工具新选择—SQLark 百灵连接
达梦产品与服务
48次阅读
2025-03-04 17:55:38
站在DeepSeek的肩膀上,我用zCloud看到企业级SQL性能优化的更多可能性
云和恩墨
46次阅读
2025-03-06 17:59:46
惊爆眼球!MySQL、Oracle、PostgreSQL 谁是数据库界的 “真命天子”?
青年数据库学习互助会
45次阅读
2025-03-03 09:53:09