基数估计有所不同的查询执行计划示例

Fel*_*ipe 2 sql-server optimization execution-plan cardinality-estimates

我正在尝试创建一个查询执行计划的示例,它表明如果我对表的某些列进行基数估计,我可以决定哪个查询执行计划的成本最低。

所以我有这两篇文章(12),我可以将估计基数理解为列上不同值的数量。然后我计算选择性。

SELECT max(price) FROM tickets WHERE country = "CANADA";
Run Code Online (Sandbox Code Playgroud)

如果我的桌子有 180 件物品,而只有 10 件是加拿大的。而且只有 4 个不同的国家(加拿大、巴西、美国、德国)。所以....

列 country é 4的基数,因为它是不同项目的数量。

列 country = CANADA的选择性是访问的项目数除以表中的项目数。10/180 = 0.0555。

但是优化器可以根据基数选择哪些不同的查询执行计划?

如果这不是一个很好的例子,有人可以指出一个查询,基数对于优化器来说是一种财富,以便决定选择一个计划还是另一个计划?

谢谢,费利佩

Eri*_*ing 5

在 180 行时,您不太可能看到任何差异。

为了看到在不同的谓词分布中选择不同的计划,您需要更多的数据,以及可能的竞争数据源(索引)来帮助它们。

假设您在表中有 1.8 毫米的行。如果你有

  • 与价格或国家无关的列上的聚集索引(如 Id 或其他东西)
  • 价格和国家的非聚集指数
  • 国家/地区的单列非聚集索引

您可能会开始发现聚合方法、选择的串行与并行计划以及索引选择有所不同,这取决于您搜索的国家/地区及其选择性。

以最近的问答为例:

出于更复杂的原因: