【发布时间】:2013-06-10 20:00:36
【问题描述】:
我不是数据库专家,想咨询一下我遇到的问题。
有一个非常慢的 MS SQL Server 2008 R2 存储过程。它是如何工作的?
1) Stor. proc. takes 2 input parameters: beginDate and endDate (DATETIME)
2) The temporary table is created using: DECLARE @temp TABLE (columns)
3) INSERT INTO @temp SELECT columns FROM huge_view WHERE conditions1
4) INSERT INTO @temp SELECT columns FROM huge_view WHERE conditions2
5) SELECT columns FROM @temp GROUP BY columns ORDER BY columns
huge_view 有一些 INNER、LEFT 和 RIGHT JOINS。
我知道如果不看真实代码就很难说些什么,但也许有人可以给出一些指导。
【问题讨论】:
-
确保有适当的索引在起作用(您可以在视图及其基础表上包含索引)。您可以通过删除临时表并简单地在两个选择上执行
union all来提高性能(或者如果在步骤 3 和 4 中都使用了同一个视图,您可以简单地执行 where (conditions1) 或 (conditions2) -尽管在这种情况下,任何符合这两组条件的记录只会出现一次而不是两次。 -
在 Management Studio 中,在存储过程之外运行相同的 SQL 代码会不会很慢?
-
你知道这些步骤中哪个最耗时吗?我希望它是一个或两个插入物;找出性能问题的主要根源是解决问题的第一步。
-
在使用变量表时要小心,而不是真正以“#”开头的“临时”表。如果你的表真的很大,那么变量表 (@) 就不太适合
-
好的。首先我想知道SQL Server Management Studio状态栏右下角的时间指示器是否可靠地衡量执行时间?
标签: sql-server optimization stored-procedures