SQL Server - 加入4个快速查询给我一个慢查询

时间:2012-07-30 15:14:22

标签: sql sql-server performance sql-server-2008

我的MS Sql Server数据库中有4个视图,这些视图都非常快(少于2秒)并返回少于50行。

但是当我创建一个查询,我加入这4个视图(左外连接)时,我得到一个查询,这需要将近一分钟才能完成。

我认为查询优化器在这里做得不好,有没有办法加快速度。我很想将4个视图中的每个视图复制到一个表中并将它们连接在一起,但这对我来说似乎太过于一种解决方法。

(旁注:我无法在任何表上设置任何索引,因为视图来自不同的数据库,我不允许在那里更改任何内容,所以这不是一个选项)

编辑:很抱歉,我不认为发布sql查询会有所帮助。它们非常复杂,使用了大约50个不同的桌子。我无法发布执行计划,因为我没有访问权限来生成某些数据库的执行计划。

我想我现在最好的解决方案是生成临时表来存储每个查询的结果。

3 个答案:

答案 0 :(得分:5)

如果您无法触摸索引,为了加快速度,您可以将4个查询的结果放在4个临时表中,然后加入它们。

您可以在存储过程中执行此操作。

答案 1 :(得分:3)

您可以在加入时获得派生的视图表。

示例:而不是拥有此查询

     SELECT V1.* FROM dbo.View1 AS V1 INNER JOIN dbo.View2 as V2
     ON V1.Column1=V2.Column1;

您可以使用以下查询

     SELECT V1.* FROM (SELECT * FROM dbo.View1) AS V1 INNER JOIN (SELECT * FROM dbo.View2) AS V2
     ON V1.Column1=V2.Column1;

我希望这可以改善表现。

答案 2 :(得分:1)

如果您有许多列,则只包含您需要的列。特别是,如果列上有许多数学运算,数据库必须在返回结果时转换所有数字。

还有一点是,有时候做3个查询比进行大量连接并进行1次查询更好。

但是,如果没有具体细节,很难提出正确的建议。