【发布时间】:2023-03-15 14:15:01
【问题描述】:
我一直在研究一个解决方案(在 SQL Server 中),其中所有子查询无一例外都被临时表重写以提高性能。
举个例子,所有的查询都是这样的:
SELECT something
FROM (SELECT * FROM T1 WHERE condition1)
JOIN ...
已经改写成这样:
SELECT *
INTO #tempTable
FROM T1
WHERE condition1
SELECT something
FROM #tempTable
JOIN ...
还建议here 应避免所有子查询以支持临时表。
基于给定的事实,所有子查询都应该替换为临时表吗?如果不是,什么时候应该考虑一个而不是另一个?
【问题讨论】:
-
sql server 中唯一没有例外的绝对规则是“它取决于”。我会非常强烈地争辩说,只是盲目地将每个子查询都放入临时表中是徒劳和沮丧的。在某些情况下,它可能会提高性能,但在其他情况下,它可能会使情况变得更糟。考虑一个有一百万行的子查询。虽然这可能不是编写将大量数据复制到临时表的代码的好方法,但速度会更慢。充其量你可能正在“修复”一个甚至不存在的性能问题。
-
这几乎就是您正在寻找的答案:stackoverflow.com/a/11169910/2333499
标签: sql sql-server query-performance