462 字
2 分钟
面试鸭-MySQL索引的最左前缀匹配原则是什么?
MySQL索引的最左前缀匹配原则是什么?
最左前缀匹配原则指的是建立联合索引时,查找条件要安装建立索引时字段从左到右的顺序来匹配。比如联合索引(a,b,c)在写查询时,条件匹配必须先匹配a,再匹配b、c。 这是因为建立联合索引在B+树中是按建立的顺序排序的,先排a的顺序,若a相同再根据b的顺序来排,若a,b都相同再按c来排。这就会导致如果直接在这个索引中不看a只看b的话,其实是无顺序的。
问题
联合索引(a,b), 查询where b=1 and a=1 能用上联合索引吗?
能用上,MySQL查询优化器足够智能,会自动优化查询条件变成 where a=1 and b=1。
为什么联合索引(a,b)查询条件 a>=1 时不会停止匹配,a>1时会停止匹配?
a>=1 and b=1 时,在a=1的时候b是有序的,因此可以直接在这里快速查找b的值,在这个查找b=1是能用上索引的,所以不会停止匹配。 而到后面a>1的时候,a不是一个定值了,在这种情况下b的值是完全无顺序的,所以就会停止匹配,进行顺序扫描。
创建联合索引应该怎么考虑顺序?
- 频繁查询的条件放左边,保证常用查询能走索引。
- 区分度高的放左边,能更快过滤掉数据。
- 范围查询的列放最右边,防止阻断后面列的匹配。
- 若经常有排序需求,把排序字段放索引里,可以避免filesort(在内存或磁盘上对结果集进行排序,若加到索引里了,找到时就是有顺序的)。
面试鸭-MySQL索引的最左前缀匹配原则是什么?
http://www.shineacz.top/posts/面试鸭-mysql索引的最左前缀匹配原则是什么/