MYSQL-怎么给字符串字段加索引
用前缀索引,合理设置前缀索引的长度,即可节省空间,又不用额外增加太多的查询成本。当前缀索引存在重复索引时,查询会增加扫描行数
如何设计前缀长度,使其在损失合理范围区分度的情况下,保证前缀长度最小?
1.算出索引列有多少个不同的值
select count(distinct email) as L from user;
2.依次选取不同长度的前缀来看这个不同的值得变化。
select count(distinct left(email,4)) as L4, count(distinct left(email,5)) as L5, count(distinct left(email,6)) as L6, count(distinct left(email,7)) as L7 from user;
前缀索引缺点:使用了前缀索引就无法使用覆盖索引,所以每次查询都需要回表查询,适合select * 这类差所有字段的语句,不适合select id,email 这种可以直接在辅助索引表命中的查询。