page contents

什么是前缀索引?

轩辕小不懂 发布于 2022-03-19 13:58
阅读 700
收藏 0
分类:数据库
3332
Nen
Nen
- 程序员

有时候需要索引很长的字符列,这会让索引变得大且慢,此时可以考虑前缀索引。MySQL目前还不支持函数索引,但是支持前缀索引,即对索引字段的前N个字符创建索引,这个特性可以大大缩小索引文件的大小,从而提高索引效率。用户在设计表结构的时候也可以对文本列根据此特性进行灵活设计。前缀索引是一种能使索引更小、更快的有效办法。

前缀索引的缺点是,在排序ORDER BY和分组GROUP BY操作的时候无法使用,也无法使用前缀索引做覆盖扫描,并且前缀索引降低了索引的选择性。索引的选择性是指不重复的索引值(也称为基数,Cardinality)和数据表的记录总数(COUNT(*))的比值,范围为(0,1]。索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行。唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。

一般情况下某个前缀的选择性也是足够高的,足以满足查询性能。对于BLOB、TEXT,或者很长的VARCHAR类型的列,必须使用前缀索引,因为MySQL不允许索引这些列的完整长度。

使用前缀索引的诀窍在于要选择足够长的前缀以保证较高的选择性,同时又不能太长(以便节约空间)。前缀应该足够长,以使得前缀索引的选择性接近于索引的整个列。换句话说,前缀的“基数”应该接近于完整的列的“基数”。

请先 登录 后评论