0

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

现在,我知道您不应该在低基数字段上创建索引。但是,在这种情况下,查询只能使用 30 个客户端 ID 之一完成。因此,在 ClientID 上创建索引是否会有所帮助,因为搜索空间会自动减少到正常情况的 1/30?还是我对索引如何工作的理解有缺陷?

谢谢

4

1 回答 1

3

我从参加的由 MySQL 赞助的研讨会中学到的一个非常普遍的经验法则是,在基数减少 80% 或更多的搜索空间的大多数情况下,您可以获得一定程度的性能优势。这似乎适用于我遇到的任何硬件设置。

这看起来像是一个您几乎肯定会从中受益的索引。当然,在需要不断调整索引的重写入表上,这可能会很快崩溃。

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

您可能还想检查 mysql 中的 BENCHMARK() 函数 - 它并不完美,但可以帮助测试如下内容: http: //dev.mysql.com/doc/refman/5.1/en/information-functions.html#功能基准

于 2010-03-16T06:14:04.127 回答