sql server 2005索引和低基数

时间:2010-04-11 00:43:38

标签: sql-server indexing cardinality

SQL Server如何确定表列是否具有低基数?

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

除此之外,如果在我的表中我有一百万个条目并且性别列中只有一个条目是'm'的情况不太可能,那么SQL服务器是否能够确定这一点并使用索引来检索单排?或者它只是知道列中只有2个不同的值而不使用索引?

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

非常感谢。

1 个答案:

答案 0 :(得分:2)

请参阅Statistics Used by the Query Optimizer in Microsoft SQL Server 2005

使用1个值“m”和999999“f”时,统计信息将为“m”提供1的基数估计值,并为“f”提供接近1M的基数估计值。但无论指数是否会被使用,还有更多因素。

通常,这样的低选择性色谱柱仅对指数没有意义。但是,它作为更复杂索引的最左列,甚至作为聚簇索引的最左列,确实有意义。即使一列对'm'而不是'f'有意义,查询自动参数化也可能对你起作用,并为变量 @gender生成一个计划。

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