我正在做一个web应用,使用ASP.NET。基本上,我需要显示来自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创建的数据是错误的方式吗?或者,有什么方法可以使查询语句更高效吗?
谢谢!
发布于 2012-10-03 21:53:52
你需要的两件事:
SELECT ID
,TIMESTAMP
,USERNAME
,CLIENTNAME
,COMMAND
,PATH
FROM P4D (NOLOCK) WHERE TIMESTAMP BETWEEN @CurrentDate AND @PastWeek; (将nolock添加到您的查询)
并使用TIMESTAMP添加一个非集群索引,并将选定的列(ID,USERNAME,CLIENTNAME,COMMAND,PATH)添加到此索引中。
https://stackoverflow.com/questions/12709898
复制相似问题