编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

浅出MySql 索引:组合索引--最左原则(实战,截图集锦)

wxchong 2024-07-05 01:58:44 开源技术 38 ℃ 0 评论

索引

通过B+tree树算法,提高查询速度。为什么这么快呢,这里就不深入讲了,因为违背题目的中心思想。

通俗讲:(业界广为流传的说法)

为什么快,好比一本字典,如果没有按拼音,按部首那么直接找,一个“帅”字,可能除了直接看我的照片以外,就只能一个一个的查找了。有了拼音,部首这些,可以一级一级的筛选,提高了查找速度。

索引类型

  1. 主键索引
  2. 唯一索引
  3. 普通索引
  4. 全文索引
  5. 组合索引 (我是本篇最亮的星)

组合索引

组合索引,也有人叫我(复合索引),不冲突。两个都是我。

对多列字段,组合建立索引。

例: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 内部优化,依然,触发使用到索引,忽略最左原则

如果,非全部字段使用到,那么遵循 最左原则

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表