前缀索引
有时候需要索引很长的字符列,这会让索引变的大且慢,一个策略是模拟哈希索引,第二个策略是使用前缀索引。
索引开始的部分字符,这样可以大大节约索引空间,提高索引效率,但是会降低索引的选择性。
索引的选择性是指:不重复的索引值和数据表的记录总数(#t)的比值,范围从1/#t到1 之间,索引的选择性越高则查询效率越高。因为选择性搞的索引可以让mysql在查找时过滤掉更多的行。
唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。
对于blob,text或者很长的varchar类型的列,必须使用前缀索引,因为mysql不允许索引这些列的完整长度。
选择足够长的前缀以保证较高的选择性。同时又不能太长(以便节约空间)前缀应该最够长。以使得前缀索引的选择性接近于整个列。换句话说,前缀的基数应该接近于完整列的基数。
合适的前缀长度:
创建前缀索引:
alter table tablename add key (column(n));
缺点:mysql无法使用前缀索引做order by 和group by,也无法使用前缀索引做覆盖扫描。
参考资料:mysq高性能
有时候需要索引很长的字符列,这会让索引变的大且慢,一个策略是模拟哈希索引,第二个策略是使用前缀索引。
索引开始的部分字符,这样可以大大节约索引空间,提高索引效率,但是会降低索引的选择性。
索引的选择性是指:不重复的索引值和数据表的记录总数(#t)的比值,范围从1/#t到1 之间,索引的选择性越高则查询效率越高。因为选择性搞的索引可以让mysql在查找时过滤掉更多的行。
唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。
对于blob,text或者很长的varchar类型的列,必须使用前缀索引,因为mysql不允许索引这些列的完整长度。
选择足够长的前缀以保证较高的选择性。同时又不能太长(以便节约空间)前缀应该最够长。以使得前缀索引的选择性接近于整个列。换句话说,前缀的基数应该接近于完整列的基数。
合适的前缀长度:
创建前缀索引:
alter table tablename add key (column(n));
缺点:mysql无法使用前缀索引做order by 和group by,也无法使用前缀索引做覆盖扫描。
参考资料:mysq高性能
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30162734/viewspace-2146246/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30162734/viewspace-2146246/