索引
通过B+tree树算法,提高查询速度。为什么这么快呢,这里就不深入讲了,因为违背题目的中心思想。
通俗讲:(业界广为流传的说法)
为什么快,好比一本字典,如果没有按拼音,按部首那么直接找,一个“帅”字,可能除了直接看我的照片以外,就只能一个一个的查找了。有了拼音,部首这些,可以一级一级的筛选,提高了查找速度。
索引类型
- 主键索引
- 唯一索引
- 普通索引
- 全文索引
- 组合索引 (我是本篇最亮的星)
组合索引
组合索引,也有人叫我(复合索引),不冲突。两个都是我。
对多列字段,组合建立索引。
例:A、B
我用的工具是:Sequel Pro (免费)
解释一下图中的索引:ID 主键索引
openid 索引是组合索引, unionid 为1,openid 为 2。也就是
排列:where unionid = 'test' and openid = 'test'
最左原则
1、正确的顺序
探讨:A、B 组合索引 使用:where unionid = 'test' and openid = 'test'
这样完美匹配索引,肯定可以使用到:
2、颠倒的顺序
探讨:B、A 组合索引 使用:where openid = 'test' and unionid = 'test'
按照最左原则,应该是使用不到的,因为他没有按照设计的索引顺序使用,但是,结果是
啪啪的打脸
从图中看到,也用到了。
思考:Mysql 比我想象中的强大,自己对where条件内部优化了,使用到了索引。
那么,组合索引的最左原则是不是伪定理呢,难道又是以讹传讹的闹剧。
继续看……
3.1 where仅使用一个字段
探讨:A字段 索引 使用:where unionid = 'test'
上截图:
很明显,使用到了
3.2 where仅使用一个字段
探讨:B字段 索引 使用:where openid = 'test'
上截图:
注意:type: ALL, 没有使用到索引,全表查询了
显然,触发了 最左原则。
结论
组合索引,如果所有字段都使用了,虽然乱序,没有按照建立索引的顺序来使用查询,但是,远比自己想象的强大的Mysql 内部优化,依然,触发使用到索引,忽略最左原则。
如果,非全部字段使用到,那么遵循 最左原则
本文暂时没有评论,来添加一个吧(●'◡'●)