SQL Server 2017 对显示计划进行了非常有用的增强,可以查看哪些统计数据用于生成计划:https://learn.microsoft.com/en-nz/archive/blogs/sql_server_team/sql-server-2017-showplan-enhancements
但是,我在执行计划中找不到它。我在 StackOverflow 数据库上有以下查询:
Use StackOverflow2010;
DROP TABLE IF EXISTS #tempPosts;
CREATE TABLE #tempPosts(
Id int
)
INSERT INTO #tempPosts
SELECT ID FROM dbo.Posts
WHERE OwnerUserId = 26837
SELECT Title, u.DisplayName, pt.Type FROM dbo.Posts p
INNER JOIN #tempPosts temp
ON p.Id = temp.Id
INNER JOIN dbo.Users u
ON p.OwnerUserId = u.Id
INNER JOIN dbo.PostTypes pt
ON p.PostTypeId = pt.Id
OPTION(RECOMPILE)
我打开了Include Actual Execution Plan
捕获计划但无法OptimizerStatsUsage
在计划中找到字段:
什么原因导致OptimizerStatsUsage
我的执行计划中没有显示?是否需要任何其他配置或步骤才能看到此属性?
感谢您的任何见解!
stackoverflow2010 数据库可能设置为较低版本的兼容级别。在我的测试中,它设置为 100,即 2008。您要么需要将数据库兼容级别至少更改为 2014(120),要么在查询中使用查询优化器提示,如下所示:
我最初认为这可能是由于 SSMS 版本较低造成的,但在更改数据库的兼容级别或使用查询优化器提示时,使用 18.11.1(旧版本)仍然有效。
然后
OptimizerStatsUsage
就会出现。另外从您的屏幕截图来看,
CardinalityEstimationModelVersion
是 70(使用旧版本)。