关于MySQL组合索引

比如一个SQL的where条件如下

WHERE `a`, `b`
WHERE `a`, `b`, `c`
WHERE `a`, `b`, `d`
WHERE `a`, `b`, `c`, `d`
WHERE `a`, `c`
WHERE `a`, `c`, `d`

此时创建组合索引 a, b, c, d 能否覆盖全部 where 查询,或怎样设置索引为最优?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

抛开实际场景的问题是没有意义的,但就你给出的问题看,以我经验,我会建立a,ba,c这两个索引,这是最精简了,当然,如果你的数据表,实际中,你不能通过a,b索引排除掉大量数据的话,这时候你就要考虑,为c或者d一起建立索引了。

3年前 评论
Adachi (楼主) 3年前
忆往昔弹指间 (作者) 3年前
Adachi (楼主) 3年前
Adachi (楼主) 3年前
Adachi (楼主) 3年前
讨论数量: 4

WHERE a, c c 用不到索引

WHERE a, c, d c d 用不到索引

3年前 评论

组合索引有最左原则,所以a, b, c, d不能覆盖a,c和a,c,d和a,b,d查询,如何要所有查询都命中索引,可以创建a,b,c,d和a,c,d和a,b,d三个组合索引

3年前 评论

没必要所有字段都命中,像‘status’这种就没必要,索引前后顺序的话,要根据a,b,c 三个字段的数据复杂度来决定。

3年前 评论
Adachi (楼主) 3年前

抛开实际场景的问题是没有意义的,但就你给出的问题看,以我经验,我会建立a,ba,c这两个索引,这是最精简了,当然,如果你的数据表,实际中,你不能通过a,b索引排除掉大量数据的话,这时候你就要考虑,为c或者d一起建立索引了。

3年前 评论
Adachi (楼主) 3年前
忆往昔弹指间 (作者) 3年前
Adachi (楼主) 3年前
Adachi (楼主) 3年前
Adachi (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!