我的MS Sql Server数据库中有4个视图,这些视图都非常快(少于2秒)并返回少于50行。
但是当我创建一个查询,我加入这4个视图(左外连接)时,我得到一个查询,这需要将近一分钟才能完成。
我认为查询优化器在这里做得不好,有没有办法加快速度。我很想将4个视图中的每个视图复制到一个表中并将它们连接在一起,但这对我来说似乎太过于一种解决方法。
(旁注:我无法在任何表上设置任何索引,因为视图来自不同的数据库,我不允许在那里更改任何内容,所以这不是一个选项)
编辑:很抱歉,我不认为发布sql查询会有所帮助。它们非常复杂,使用了大约50个不同的桌子。我无法发布执行计划,因为我没有访问权限来生成某些数据库的执行计划。
我想我现在最好的解决方案是生成临时表来存储每个查询的结果。
答案 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次查询更好。
但是,如果没有具体细节,很难提出正确的建议。