为什么mysql索引有最左前缀原则?

MySql 码拜 9年前 (2015-10-19) 2267次浏览
多列字段做索引,state/city/zipCode,想要索引生效的话,只能使用如下的组合

state/city/zipCode

state/city

state

其他方式(如city,city/zipCode),则索引不会生效

这种现象是怎么导致的?和索引的存储方式有关吗?

解决方案:40分
假设数据 表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的记录。

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


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么mysql索引有最左前缀原则?
喜欢 (0)
[1034331897@qq.com]
分享 (0)