暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

希望 SQL Server 有物化的优化选项

ZJCXC 2021-04-18
322

在 SQL Server 优化中,经常遇到复杂查询性能不佳的问题,其中的部分优化方案是拆分T-SQL,增加临时表(或表变量)来人为缓存中间结果,在这种场景下,很容易想起 mysql 的物化,虽然 mysql 动不动就物化有时候挺讨厌,但 SQL Server 不轻易物化也纠结,比如下面的查询,在 SQL Server 中,CTE 表达式中的 DATA 就做了两次


SET STATISTICS PROFILE ON
GO
DECLARE @x xml = '<r>1</r>';
WITH DATA AS(
  SELECT id = T.c.query('.') FROM @x.nodes('/r/text()') T(c)
)
SELECT * FROM DATA
UNION ALL
SELECT * FROM DATA
GO
SET STATISTICS PROFILE OFF


在复杂查询中,DATA 本身也是一个复杂查询的情况下,这种不物化导致的查询方案会很复杂,容易产生不佳的查询方案,这就需要人为干预,目前 SQL Server 没有提供相应的优化选项,人为干预通常就是拆 T-SQL  了

文章转载自ZJCXC,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论