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

为什么执行SQL查询需要这么多时间?,sql,sql-server,sql-server-2008,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(1

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

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)
在我看来,这需要很长时间。谁能建议我如何提高绩效?
或者,可能有人知道根本原因是什么?

您是否在第2列(order by使用的索引)上添加了索引?

您返回了大量数据-网络IO可能很容易解释所花费的时间

您可能还缺少column2列上的索引,这可能会导致表扫描而不是索引查找昂贵而便宜的操作。

以下几点:

您在筛选的列上有索引吗?列号不在您的问题中 这可能没有帮助,您必须选择* 索引是否使用第2列? 你分别试过吗? 设计

你需要nvarchar吗?让它变成瓦查尔 基本上,您将返回大约表的1/7,因此过滤器列上的任何索引都可能被忽略,再加上SELECT*。第2列上的索引可能有助于避免中间排序

编辑:


有3列,您可以将其作为marc_s的注释

是的,我在该列上有索引使用[Database]在[dbo].[Table][ID]上创建非聚集索引[ID],使用PAD_index=OFF,STATISTICS_norecocomputer=OFF,SORT_IN_TEMPDB=OFF,IGNORE_DUP_KEY=OFF,DROP_EXISTING=OFF,ONLINE=OFF,ALLOW_ROW_LOCKS=on,ALLOW_PAGE_LOCKS=ON ON ON ON[PRIMARY]Got这听起来像是列“id”上的索引,而不是在“column2”或“column”上,您筛选的列不在表说明中。您可以发布执行计划吗?好的,我将列类型更改为varchar并将其变小。同样的查询现在需要1分钟,14秒。谢谢。还有什么我可以改进的,使它更快吗?也不是*我改为选择3列,现在在同一列上不超过25秒query@Bogdan:如果您有一个索引,其中包含您需要的这三列(可能包括列),那么您可能会看到性能的另一个大提升