当要给字符串创建前缀索引时,如何确定我应该使用多长的前缀呢?

添加字符串索引和前缀索引

添加字符串索引: alter table SUser add index index1(email);
在索引index1中包含每条记录的整个字符串

添加前缀索引:alter table SUser add index index2(email(6));
在index2 中对于每条记录只取前6字节

使用前缀索引的缺点和优点

缺点: 前缀索引可能会增加扫描行数,因为在前缀索引中前n个字节相同的情况下越少,扫描行数就少

优点: 也就是说使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查
询成本。

如何确定使用多长的前缀

实际上,我们在建立索引时关注的是区分度,区分度越高越好。因为区分度越高,意味着重复的键值越少。因此,我们可以通过统计索引上有多少个不同的值来判断要使用多长的前缀。

查询语句:select count(distinct 字符串字段) as L from 表名;
分段查看前缀的值:select count(distinct left(字段名, 前k个)) as 列名 from 表名;
查询dev表中的cpuid的不同前缀的值

mysq1> select
->count(distinct left(cpuid,2as L2,
->count(distinct left(cpuid,3 as L3,
->count(distinct ieft(cpuid,4 as L4,
->count(distinct left(cpuid,6as L6,
->count(distinct left(cpuid,10) as L10,
->count(distinct left(cpuid,12))as L12
->from dev ;
+——--+---——+--——-+--———+------+---——+
|  L2 |  L3  |  L4  |  L6  |  L10  |  L2 |
+——--+---——+--——-+--———+------+---——+
| 750 | 1175 | 1191 | 1192 | 1195 | 1195 |
+-———-+-——--+-——---+-———--+----+——---+
1 row in set (0.03sec)

从查询结果中可以看出当 L ≥ 4 L \geq 4 L4时所对应的值基本接近,所以若要添加cpuid字符串字段为索引时,只需要截取前4个字符即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值