前缀索引查询的时候有点疑惑
来源: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回答
您好是的哈。
你可以这样辅助理解:把前缀索引想象成是一个隐藏的字段(当然实际上MySQL并不是这样做的,只是类比哈)
例如有个长字段叫 column varchar(1000) ,建立前缀索引index(前缀50)后,你想象成MySQL额外创建了一个隐藏字段 column2 varchar(50),并针对这个隐藏字段创建了索引,这样就比较好理解了。
相似问题