时间:2021-07-01 10:21:17 帮助过:41人阅读
这里最关键的参数就是prefix_length,这个值需要根据实际表的内容,得到合适的索引选择性(Index Selectivity)。索引选择性就是不重复的个数与总个数的比值。
select 1.0*count(distinct column_name)/count(*)比如我们现在有个Employee表,其中有个FirstName字段,是varchar(50)的,我们查询该字段的索引选择性:
select 1.0*count(distinct FirstName)/count(*)得到结果0.7500,然后我们希望对FirstName建立前缀索引,希望前缀索引的选择性能够尽量贴近于对整个字段建立索引时的选择性。我们先看看3个字符,如何:
select 1.0*count(distinct left(FirstName,3))/count(*)得到的结果是0.58784,好像差距有点大,我们再试一试4个字符呢:
select 1.0*count(distinct left(FirstName,4))/count(*)得到0.68919,已经提升了很多,再试一试5个字符,得到的结果是0.72297,这个结果与0.75已经很接近了,所以我们这里认为前缀长度5是一个合适的取值。所以我们可以为FirstName建立前缀索引:
alter table test.Employee add key(FirstName(5))建立前缀索引后查询语句并不需要更改,如果我们要查询所有FirstName为Devin的Employee,那么SQL仍然写成:
select *【转】MySQL前缀索引 —— 优化的一种方式
标签:from 很多 结果 不能 使用 var dex 速度 class