关于低到中等基数列的mysql索引的问题

时间:2010-03-16 06:08:01

标签: mysql indexing cardinality

我对数据库索引的工作方式有一个普遍的疑问,特别是在mysql中。假设我有一个包含一百万行的表,其中一列“ClientID”在30个值中相对平均分配。因此,该列相对于主键(100万)的基数(30)非常低。

现在,我知道你不应该在低基数字段上创建索引。但是,在这种情况下,只能使用30个clientID之一进行查询。因此,不会在ClientID上创建索引会有所帮助,因为搜索空间会自动减少到通常的1/30?或者我对索引的工作原理有何了解?

由于

1 个答案:

答案 0 :(得分:3)

我从MySQL参与的研讨会中学到的一个非常一般的经验法则是,在基数将搜索空间减少80%或更多的情况下,您获得了一定程度的性能优势。这似乎与我遇到的任何硬件设置有关。

这看起来像你几乎肯定会受益的索引。当然,这可以很快打破重写表,其中索引需要不断调整。

在其他情况下,正确的答案实际上是“它取决于”,而基准测试通常是要走的路。

您可能还想检查mysql中的BENCHMARK()函数 - 它并不完美但可以帮助测试这样的事情:http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_benchmark