sql优化之索引下推误区
文章目录
- 1、问题
- 2、为什么
- 3、怎么做
1、问题
索引下推,联合索引a-b,如果使用where a=xxx and b=xxx则可以使用联合索引直接在数据引擎层过滤这两个条件。
B+树我们都知道,二级索引的叶子结点value保存的是主键id,那存在索引a,where a=xxx and id=xxx能否使用索引下推呢,还是只使用a索引的最左匹配原则?
2、为什么
答案是不能。
因为想要使用索引,这个索引必须是有序的,而二级索引的value所保存的id是无序的,所以无法像正常索引一样高效过滤数据,只能暴力遍历,虽然还是比起回表要好得多,但目前数据库引擎并不支持这种类似于部分索引(ICP)的操作,还是会回表
3、怎么做
要避免这个问题也简单,直接增加完整的联合索引a-id即可