SQL Server-SQL Server如何选择最佳执行计划

时间:2019-12-08 01:59:07

标签: sql sql-server

众所周知,SQL Server根据统计信息选择了最佳计划。我想知道SQL Server选择最佳计划时使用的规则。请分享描述信息的资源。

1 个答案:

答案 0 :(得分:3)

有关该主题的整本,因此您在这里不会得到快速而全面的答案。

基本方法是应用一组规则,并与每个规则相关联的评分标准。总资源得分最低的方法将适用。

常见规则,包括:

  1. 处理复杂联接查询中的表(从最有选择性到最小)。这种方法通过逐渐减少必须评估的潜在合格行的数量,最大程度地减少了查询使用的总体I / O。
  2. 在有索引的地方(用于连接或WHERE限制),请尝试按照规则1使用索引。对于大型联接,聚集索引通常具有优势。有时,索引就是满足查询需求所需要的全部内容,并且表本身根本不需要读取。
  3. 企业数据库通常维护有关行数以及为特定列或索引找到的数据值的相对选择性的“统计”。如果值是多种多样的(即满足您的JOIN / WHERE条件的行很少),则优先考虑:它的资源得分会更低。
  4. 将评估并行执行的机会,并在可用时使用。因此,如果有独立的查询块,优化器可能会尝试并行运行它们。
  5. 可以扫描较小的表,而使用I / O较少的表则可以扫描较大的表。在可能的情况下,将优先按照执行顺序对这些表进行修改。 (这同样适用于经统计预测将返回几行的子查询。)

这是一个非常复杂的主题,我上面建议的只是最常用的策略。查询优化器是深入而复杂的程序,并提供了不同数据库提供的许​​多专有优势。 Microsoft在SQL Server Internals上具有 excellent 系列丛书。如果您想深入了解该主题,我强烈推荐这些主题。

您要求发表一篇文章:由于基本策略相同,因此Oracle的这篇文章几乎适用于其他企业级数据库,例如SQL Server或DB2:

           [Query Optimizer Concepts][https://docs.oracle.com/database/121/TGSQL/tgsql_optcncpt.htm#TGSQL227]