给定以下常量:
- 具有相同结构(表,索引等)的相同数据库
- 相同的数据
- 相同的SQL Server和硬件配置
- 相同的统计
- 客户端中相同的SET选项
- 相同的SQL Server版本
- 相同的跟踪标志
给定这些常量,SQL Server会始终为给定查询生成相同的计划吗?
如果没有,还有其他考虑吗?是否还需要考虑不确定性因素?
说相同的计划是不正确的,但是我们可以说类似的计划。以及DBA /开发人员可以控制的外部因素;SQL Server引擎内部编写了“查询计划优化算法”和“内部查询成本算法”。我们没有以所有方式告诉“选择什么”的控制权。我们可以设置外部环境来引导引擎选择最佳。对于给定的查询,如果优化程序提出了两个执行计划,可以说有0.001的成本差异,那么我猜这与选择的执行计划无关。
—
Anup Shah 2014年