mysql最左前缀实现原理_Mysql 最左前缀原理

你可以认为联合索引是闯关游戏的设计

例如你这个联合索引是state/city/zipCode

那么state就是第一关 city是第二关, zipCode就是第三关

你必须匹配了第一关,才能匹配第二关,匹配了第一关和第二关,才能匹配第三关

你不能直接到第二关的

索引的格式就是第一层是state,第二层才是city

假设数据 表T (a,b,c) rowid 为物理位置

rowid a b c

(1) 1 1 1

(2) 2 1 13

(3) 2 2 14

(4) 1 3 3

(5) 2 3 12

(6) 1 2 5

(7) 2 3 9

(8) 1 2 2

(9) 1 3 6

(10) 2 2 11

(11) 2 2 8

(12) 1 1 7

(13) 2 3 15

(14) 1 1 4

(15) 2 1 10

当你创建一个索引 create index xxx on t(a,b), 则索引文件逻辑上等同于如下

a b rowid

1 1 1

1 1 12

1 1 14

1 2 6

1 2 8

1 3 4

1 3 9

2 1 2

2 1 15

2 2 3

2 2 10

2 2 11

2 3 5

2 3 7

2 3 13

当select * from T where a=1 and b=3 的时候, 数据库系统可以直接从索引文件中直接二分法找到A=1的记录,然后再B=3的记录。(如果这里是需要找b=5则在a=1下面直接找没找到就能确定这个sql查不到对应的结果了。 不用整个遍历了。 因为即使其他地方有b=5 也不满足a=1 所以无对应结果)

但如果你 where b=3 则需要遍历这个索引表的全部!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值