mysql索引---------6前缀索引

我们可以对it表的style,userid做索引,那么能不能对content字段做索引呢?

答案是可以的。

但是你要清楚最为根本的一点,字符串做索引和数字做索引的效率相差很大。

其次,mysql对于TEXT/BOOL以及太长的VARCHAR字段是不允许被索引的。

在本例中,content字段是varchar类型的,且长度不是太长,所以可以加入索引,但是对于太长的字段,该怎么加入索引呢?

那就是使用前缀索引。

ALTER TABLE it ADD KEY(content(8))

上面这条语句就是将content字段的前8位作为了索引,就是这么简单。

语句虽然简单,但真正设计索引的时候,最麻烦的是到底取前几位比较合适?

这个数字比较关键,它直接决定了你的索引性能。

不能太大,太大的话,影响匹配时间,太小的话,每个索引包括太多行,失去了索引的意义。

这时候你需要取计算下前N位的选择性。

SELECT COUNT(DISTINCT LEFT(content,5))/COUNT(*) FROM it #0.0230
SELECT COUNT(DISTINCT LEFT(content,6))/COUNT(*) FROM it #0.0290
SELECT COUNT(DISTINCT LEFT(content,7))/COUNT(*) FROM it #0.0411
SELECT COUNT(DISTINCT LEFT(content,8))/COUNT(*) FROM it #0.0422

前面我们说了,选择性越大越好,我们现在就是看一下,在合适的长度里,取出合适的选择性。

这里我们选择了长度7,因为长度7和长度8的选择性差不多,但是字符越少越好。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值