1

SQL Server 如何判断表列是否具有低基数?

我问的原因是因为查询优化器很可能不会在性别列(值“m”和“f”)上使用索引。但是,它将如何确定性别列的基数来做出该决定?

最重要的是,如果万一我的表中有一百万个条目,而性别列中只有一个条目是“m”,那么 SQL Server 是否能够确定这一点并使用索引来检索该单行?还是只知道列中只有 2 个不同的值而不使用索引?

我很欣赏上面讨论了一些糟糕的数据库设计,但我只是想了解查询优化器是如何做出决定的。

非常感谢。

4

1 回答 1

2

请参阅Microsoft SQL Server 2005 中查询优化器使用的统计信息。

对于 1 值 'm' 和 999999 'f',统计数据将为 'm' 提供 1 的基数估计值,而为 'f' 提供接近 1M 的值。但是,是否使用索引,还有更多的因素。

通常,这种低选择性列仅对索引没有意义。但是,作为更复杂索引的最左侧列,甚至作为聚集索引的最左侧列,它确实有意义。即使一列对“m”有意义,而对“f”没有意义,查询自动参数化可能会对您产生影响,并为变量@gender 生成计划。

您必须阅读更多内容或提供更多详细信息。一些很好的资源是 QO 团队和团队成员的博客:

于 2010-04-11T01:26:00.673 回答