SQL查询得太慢了

时间:2011-02-01 10:09:03

标签: sql-server sql-server-2000

几天前我写了一个查询,它很快就会执行,但现在需要1小时。 此查询在我的SQL7服务器上运行,大约需要10秒钟。 此查询存在于另一台SQL7服务器上,直到上周才开始 10秒 两台服务器的配置相同。只有硬件不同。

现在,在第二台服务器上,此查询大约需要30分钟来提取s ame细节,但任何人都改变了任何细节。

如果我在没有Where的情况下执行此查询,它将在7中显示详细信息 秒。 如果问题在哪里

,此查询仍然需要大约相同的时间

2 个答案:

答案 0 :(得分:0)

没有看到查询和可能的数据,除了提供提示之外我不能做很多事情。

  1. 您可以对查询添加更多约束吗?如果您可以减少所涉及的数据量,那么这将加快查询速度。
  2. 查看联接中使用的列,where和having子句以及order by。检查列所属的表是否包含这些列的索引。
  3. 您是否需要使用用户定义的功能,还是可以采用其他方式?
  4. 您使用的是subquerys吗?如果是这样,可以将它们分成不同的视图吗?
  5. 希望这有帮助。

答案 1 :(得分:0)

如果不知道您的表中有多少数据,并且不知道您的架构,那么很难给出明确的答案,但需要注意的事项:

  1. 尝试投放UPDATE STATSDBCC REINDEX
  2. 桌子上有索引吗?如果没有,请尝试将索引添加到WHERE子句和JOIN谓词中使用的列。
  3. 避免使用交叉表OR条款(即,您WHERE table1.col1 = @somevalue OR table2.col2 = @someothervalue处)。 SQL无法使用此构造有效地使用索引,您可以通过将查询拆分为两个并UNION结果来获得更好的性能。
  4. 您的功能(UDF)做什么以及如何使用它们?值得注意的是,将它们放在查询的列部分会变得昂贵,因为每行返回执行的函数:因此,如果函数对数据库执行select,那么最终会对数据库运行n + 1个查询(其中n =主选择中返回的行数)。如果可能,请尝试并设计该功能。
  5. 确保你的JOIN是正确的 - 在你使用LEFT JOIN的地方,重新审视逻辑并查看它是否需要左转或是否可以变为内部联接。有时候人们会使用LEFT JOIN,但是当你检查查询其余部分的逻辑时,有时很明显LEFT JOIN什么都不给你(因为,例如,某人可能已经添加了WHERE col IS NOT NULL谓词加入表)。 INNER JOIN可以更快,所以值得回顾所有这些。
  6. 如果我们能够看到查询,那么建议事情要容易得多。