mysql> SELECT COUNT(DISTINCT LEFT(field, 3))/COUNT(*) AS sel3,
-> COUNT(DISTINCT LEFT(field, 4))/COUNT(*) AS sel4,
-> COUNT(DISTINCT LEFT(field, 5))/COUNT(*) AS sel5,
-> COUNT(DISTINCT LEFT(field, 6))/COUNT(*) AS sel6,
-> COUNT(DISTINCT LEFT(field, 7))/COUNT(*) AS sel7
-> FROM table;
,上面的方式虽然简单但是总有一些最坏情况,比如查询时总是查询出那些重复出现次数较大的数据,这样虽然平均值趋于平滑,但是索引在过滤数据时总是不能够去除这些重复度较高的索引值,所以,这种方式有时不能够得到一个很好的索引长度.
另一种获得较好的索引长度的方法是将不同长度的数据值以及它的出现次数,如下sql
mysql> SELECT COUNT(*) AS cnt, LEFT(field, 3) AS pref
-> FROM table GROUP BY pref ORDER BY cnt DESC LIMIT 10;
对不同的长度进行查询,最后将结果和最长索引长度的查询结果进行比较,如果出现次数较高的若干个重复值和它相差不大,则可以选用其作为合适的索引长度