优化太多的多重左连接

时间:2015-06-08 18:21:07

标签: asp.net sql-server

最近,我开始致力于客户端解决现有 ASP.Net Web应用程序中的错误。其中一个缺陷是性能优化。我找到了一个名为[Applications]的表,有160列。还有一个视图[vwApplications],在 SQL服务器数据库 中有680列和80个左连接。 我无法减少列或连接,因为它已经在应用程序的其他部分或其他应用程序中使用。

例如:

select a.column1, a.column2......... -- upto 680 columns..
from Applications a
left join table1 on a.id = table1.id
left join .....
left join .... -- upto 80 left joins

所有表都有标识列,上面有主键。 我必须优化此视图,因为执行10000条记录需要1分钟。 我试过拆分查询和临时表来存储部分数据,最后将所有表合并为一个,但没有太大成功。

1 个答案:

答案 0 :(得分:2)

美好的一天,

首先,我同意@Sean Lange的说法,没有足够的信息可以为您提供解决方案。至少我们需要DDL + DML。

与此同时,本文提供了一些控制JOIN顺序的信息和技巧。请检查这是否有助于您: http://social.technet.microsoft.com/wiki/contents/articles/25668.transact-sql-join-order.aspx

基本上,您应该检查执行计划和IO(使用SET STATISTICS IO ON),以便找到适合您数据库的最佳顺序。本文可以帮助您控制订单。请记住,对同一个实例上的两个不同SQL Server版本甚至两个不同数据库的相同查询可能表现不同

  1. 在大多数情况下,最好先加入较小的SET。
  2. 记得在JOIN运算符之前测试过滤数据(使用简单的JOIN,SQL Server查询引擎可以构建一个好的执行计划并很好地组织操作的顺序。但是在很多JOIN的复杂查询中它失败了,我们需要在某些情况下控制订单)
  3. 我希望这很有用: - )