一.什么是前缀索引

前缀索引: 对文本的前几个字符建立索引,具体几个字符在建立索引的时候指定,这样建立起来的索引更小,查询速度更快。(MySQL的前缀索引在查询时是内部自动完成匹配的,并不需要使用Left函数)。

为什么只对前几个字符建立索引,而不是整个字段建立索引:使用前缀索引,可能都是因为整个字段的数据量太大,没有必要针对整个字段建立索引。而前缀索引仅仅是选择一个字段的部分字符作为索引,这样一方面可以节约索引空间,另一方面则可以提高索引效率,但是会降低索引的选择性。

二.什么是索引选择性

关于索引的选择性(Index Selectivity),它是指不重复的索引值(也称为基数cardinality)和数据表的记录总数的比值,取值范围在 [0,1] 之间。索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL 在查找时过滤掉更多的行。那有小伙伴要问了,是不是选择性越高的索引越好呢?当然不是!索引选择性最高为 1,如果索引选择性为 1,就是唯一索引了,搜索的时候就能直接通过搜索条件定位到具体一行记录!这个时候虽然性能好,但是也是最费空间的,这不符合我们创建前缀索引的初衷。我们一开始之所以要创建前缀索引而不是唯一索引,就是希望能够在索引的性能和空间之间找到一个平衡,我们希望能够选择足够长的前缀以保证较高的选择性(这样在查询的过程中就不需要扫描很多行),但是又希望索引不要太过于占用存储空间,那么我们该如何选择一个合适的索引选择性呢?索引前缀应该足够长,以便前缀索引的选择性接近于索引的整个列,即前缀的基数应该接近于完整列的基数。