前缀索引查询的时候有点疑惑

来源:2-5 索引调优技巧1-长字段的索引调优

Panda_io

2021-04-28 11:31:54

假设 a 列里面有两行 abcdefg  abcujk

假设取前三个字符作为索引,也就是B+树节点里面只有“abc”

查询的时候 select * from table where a = "abcdefg",我实验过会使用 a 这个索引

但是索引(B+树节点)里面只存储了abc,那么前缀索引的匹配逻辑是不是索引值只要是待查询字符串从头开始的那个子串,那么就表示命中,然后回表查询出两条数据(abcdefg  abcujk),再进行结果对比用abcdefg  abcujk 分别和 "abcdefg" 做匹配,匹配成功则返回


是这样的吗老师?

写回答

1回答

大目

2021-05-14

您好是的哈。

你可以这样辅助理解:把前缀索引想象成是一个隐藏的字段(当然实际上MySQL并不是这样做的,只是类比哈)

例如有个长字段叫 column varchar(1000)   ,建立前缀索引index(前缀50)后,你想象成MySQL额外创建了一个隐藏字段 column2 varchar(50),并针对这个隐藏字段创建了索引,这样就比较好理解了。

0
handa_io
hp>明白了谢谢老师!

h021-05-15
共1条回复

Java架构师-技术专家

千万级电商项目从0到100全过程,覆盖Java程序员不同成长阶段的核心问题与解决方案

2672 学习 · 5839 问题

查看课程