【问题标题】:Stored procedure is very slow存储过程很慢
【发布时间】: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


【解决方案1】:
  1. 检查在 SQL Server 本身上运行时性能是否缓慢,或者在客户端计算机上执行时是否缓慢。如果仅在客户端计算机上速度较慢,则网络是问题。
  2. 检查视图有多少数据。
  3. 检查表是否有主键、外键和适用的约束。它们可以显着提高连接的性能。
  4. 运行 Database Tuning advisor 以了解您可以创建哪些其他索引和统计信息。

【讨论】:

  • 不需要以交互方式登录服务器来执行查询。在 SSMS 中捕获客户端统计信息,它将显示执行时间(在服务器上)与总时间。几乎从不需要以交互方式登录到服务器 - 几乎所有关于 SQL Server 的内容都可以远程管理。
猜你喜欢
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
相关资源
最近更新 更多