是否应该用临时表替换所有子查询?

Arv*_*and 2 sql sql-server query-performance

我一直在研究一种解决方案(在SQL Server中),其中所有没有异常的子查询都已使用临时表重写,以提高性能.

举个例子,所有的查询都是这样的:

SELECT something 
FROM (SELECT * FROM T1 WHERE condition1) 
JOIN ...
Run Code Online (Sandbox Code Playgroud)

被重写为这样:

SELECT * 
INTO #tempTable 
FROM T1 
WHERE condition1

SELECT something 
FROM #tempTable  
JOIN ...
Run Code Online (Sandbox Code Playgroud)

这里还建议所有子查询都应该避免使用临时表.

基于给定的事实,是否应该用临时表替换所有子查询?如果不是什么时候应该考虑另一个?

Gor*_*off 7

这太荒谬了.笑话.

你的"子查询"很好.SQL Server只是忽略它.您可以将其重写为:

SELECT something
FROM T1 JOIN . . .
WHERE condition1
Run Code Online (Sandbox Code Playgroud)

SQL Server应该正确优化它.

根据我使用SQL Server的经验,极少数情况下需要创建临时表来优化查询.更常见的是,我使用查询提示来避免嵌套循环连接.

如果需要临时表,那么表上几乎总会有索引.这是使用临时表的关键原因之一.(另外两个是因为通过一个查询或多个查询重复相同的查询块).