1

我正在使用 ASP.NET 制作一个 Web 应用程序。基本上,我需要显示来自具有十亿行数据库的 SQL Server 的数据。当我查询某些内容时,通常会花费很多时间。例如,我使用以下代码查询上周创建的数据:

DECLARE @CurrentDate as DateTime,
        @PastWeek as DateTime;

SET @CurrentDate = GETDATE();
SET @PastWeek = DATEADD(ww, -1, @CurrentDate);      

SELECT [ID]
      ,[TIMESTAMP]
      ,[USERNAME]
      ,[CLIENTNAME]
      ,[COMMAND]
      ,[PATH]
  FROM [P4D] WHERE TIMESTAMP BETWEEN @CurrentDate AND @PastWeek;

20分钟后仍在查询。我认为这需要很长时间,因为它测试每一行是否在时间范围内。

提取过去一周创建的数据的方法是否错误?或者有什么方法可以让查询语句更高效?

谢谢!

4

1 回答 1

2

你需要的两件事:

SELECT ID 
      ,TIMESTAMP
      ,USERNAME 
      ,CLIENTNAME 
      ,COMMAND
      ,PATH
  FROM P4D (NOLOCK) WHERE TIMESTAMP BETWEEN @CurrentDate AND @PastWeek; 

(在您的查询中添加一个 nolock)

并添加一个非聚集索引,TIMESTAMP并将选定的列添加(ID,USERNAME,CLIENTNAME,COMMAND,PATH)到该索引。

于 2012-10-03T13:53:52.320 回答