代码之家  ›  专栏  ›  技术社区  ›  Peanut

SQL Server 2005索引和低基数

  •  1
  • Peanut  · 技术社区  · 15 年前

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

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

    除此之外,如果在不太可能的情况下,我的表中有一百万个条目,而gender列中只有一个条目是“m”,SQL Server是否能够确定这一点并使用索引来检索该单行?或者只知道列中只有两个不同的值,而不使用索引?

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

    多谢。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Remus Rusanu    15 年前

    Statistics Used by the Query Optimizer in Microsoft SQL Server 2005 .

    对于1个值“m”和999999“f”,统计数据将给出“m”的基数估计值1,“f”的基数估计值接近1百万。但无论是否使用该指数,都有更多的因素。

    一般来说,这样一个低选择性的色谱柱单独在一个索引上是没有意义的。但是,对于更复杂的索引来说,它确实是最左边的列,甚至对于聚集索引来说,它也是最左边的列。即使一列对“m”有意义,而不是对“f”,查询自动参数化可能会对您起作用,并为 变量 @而是性别。

    你要么阅读更多,要么提供更多细节。一些很好的资源是质量管理团队和团队成员的博客: