我正在使用ASP.NET创建一个Web应用程序。基本上,我需要显示来自SQL Server的数据,该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分钟后仍在查询。我认为这需要很长时间,因为它测试每一行是否在时间范围内。
提取从pastweek创建的数据是错误的方法吗?或者有什么方法可以提高查询语句的效率吗?
谢谢!
答案 0 :(得分:2)
你需要的两件事:
SELECT ID
,TIMESTAMP
,USERNAME
,CLIENTNAME
,COMMAND
,PATH
FROM P4D (NOLOCK) WHERE TIMESTAMP BETWEEN @CurrentDate AND @PastWeek;
(在你的查询中添加一个nolock)
使用TIMESTAMP
添加非clustustred索引,并将选定的列(ID,USERNAME,CLIENTNAME,COMMAND,PATH)
添加到此索引。