MySQL InnoDB 前缀索引的使用详解和注意事项

前缀索引的使用和注意事项

  • 前缀索引

当字段里有很长字符串的列(TEXT,长的VARCHER等…),在前几个字符串里加索引,这就是前缀索引。

前缀索引语法:

alter table table_name add key(column_name(length));

优点:索引很长的字符列,这会让索引变得大且慢前缀索引提高索引效率。

缺点:降低索引的选择性。

选择性:不重复的索引值(基数,cardinality)与表的记录总数(count(*))的比值。一个索引的选择性越接近于1,这个索引的效率就越高。唯一索引(主键索引)的选择性是1,这是最好的索引选择性,性能也是最好的。

eg:如果一个表中有2000条记录,表索引列有1980个不同的值,那么这个索引的选择性就是 1980/2000=0.99。

      user表 字段id   字段name     给name字段 添加前缀索引 如何判断加具体几个字符最合适?

1.求user表字段name的选择性比值 即用 name索引列有多少个不同的值 count(distinct name)除以user表的记录总数(count(*))

select count(distinct name)/count(*) from user

比如 得出的值是0.533

  1. 再在name字段加上若干个具体的前几个字符的值,得出的值谁接近0.533就用第几个值作为索引值。
select 	count(distinct left(name,3))/count(*)    as car3,
        count(distinct left(name,4))/count(*)    as car4,
   		count(distinct left(name,5))/count(*)    as car5, 
     	count(distinct left(name,6))/count(*)    as car6, 
from user;

即 car3,car4,car5,car6 谁的值接近0.533 就用那个参数值。
这里的参数值length指的是3,4,5,6不是算出的值别弄混淆了…

注意:1.不能在order by 和group by 里使用 2.不能使用覆盖索引

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值