我们可以对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的选择性差不多,但是字符越少越好。