2

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

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

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

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

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

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

4

3 回答 3

5

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

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

于 2012-07-30T15:18:12.757 回答
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;

我希望这可以提高性能。

于 2012-11-02T07:06:01.343 回答
1

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

还有一点是,有时做 3 个查询比做一个巨大的连接并做 1 个查询更好。

然而,如果没有具体细节,就很难给出超出一般性的正确建议。

于 2012-07-30T15:19:50.257 回答