SQL Server如何确定表列是否具有低基数?
我问的原因是因为查询优化器很可能不会在性别列上使用索引(值'm'和'f')。但是,如何确定性别列的基数来做出决定呢?
除此之外,如果在我的表中我有一百万个条目并且性别列中只有一个条目是'm'的情况不太可能,那么SQL服务器是否能够确定这一点并使用索引来检索单排?或者它只是知道列中只有2个不同的值而不使用索引?
我很欣赏上面讨论的一些糟糕的数据库设计,但我只是想了解查询优化器如何做出决策。
非常感谢。
答案 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团队和团队成员博客提供了一些很好的资源: