一、怎么创建前缀索引
当我们索引的字段是很长的字符串时,可以用到前缀索引
表结构
CREATE TABLE `tb_goods_spu` (
`id` bigint(20) NOT NULL COMMENT '主键',
`goods_name` varchar(128) NOT NULL COMMENT '商品名称',
PRIMARY KEY (`id`)
)
创建前缀索引结构
alter table tb_goods_spu add key(goods_name(5));
我们创建了一个长度为5的前缀索引,如何确定前缀缩影的长度呢?
二、确定前缀索引的长度
我们可以先查出最常见的商品名称数据
select count(*) as count,goods_name from tb_goods_spu
GROUP BY goods_name ORDER BY count desc limit 10;
结果:
我们发现前面的出现的次数都是几次和十几次
我们先从2个前缀字母开始
select count(*) as count,left(goods_name,2) as pre from tb_goods_spu
GROUP BY pre ORDER BY count desc limit 10;
结果:
前缀的个数比原来的次数多了,因为唯一前缀比唯一商品名称要少得多。我们可以增加前缀长度
select count(*) as count,left(goods_name,7) as pre from tb_goods_spu
GROUP BY pre ORDER BY count desc limit 10;
结果:
我们发现到7就接近了,可以建长度为7的。
三、局限
前缀索引无法使用order by 和 group by,也无法使用前缀索引做覆盖扫描
这里的数据太少,不太明显。但是只要更接近原字段的选择性就行。