为什么执行SQL查询需要这么多时间?

时间:2011-01-16 15:52:51

标签: sql sql-server sql-server-2008

我有一个查询,你可以看到下面的例子:

SELECT TOP(50000)* FROM
[Database].[dbo].[Table] WHERE Column
IS NOT NULL ORDER BY Column2 DESC

要执行它需要 2分21秒,总记录 350K

列类型

ID int
Column1 nvarchar(50)
Column2 nvarchar(250)
Column3 datetime
Column4 nvarchar(1000)
Column5 nvarchar(1000)
Column6 nvarchar(50)

在我看来,需要很长时间。任何人都可以建议我如何提高性能? 或者也许有人知道什么是根本原因?

3 个答案:

答案 0 :(得分:3)

有几件事:

  • 您在过滤的“列”上有索引吗?列号不在您的问题中
  • 你可能没有帮助,你有SELECT *
  • 索引是否使用column2?
  • 您是否单独尝试过?

设计

  • 你需要nvarchar吗? make it varchar

基本上,你返回表的1/7左右,因此可以忽略过滤器列上的任何索引,再加上SELECT *。 column2上的索引可能有助于避免中间排序。

编辑:

有3列,您可以将其设为covering(如marc_s'评论)

答案 1 :(得分:1)

您正在返回大量数据 - 网络IO可能很容易占用所花费的时间。

您可能还错过了column2列上的索引,这可能导致表扫描而不是索引搜索(昂贵与廉价操作)。

答案 2 :(得分:0)

您是否在第2列(用于排序的那个)上放了一个索引?