【发布时间】:2011-01-13 22:20:15
【问题描述】:
我编写了以下代码,它工作正常,但如果表包含一百万条记录,则需要大约 3 秒才能完成。有没有办法优化下面的代码。
DBCC DROPCLEANBUFFERS;
DBCC FREEPROCCACHE;
DECLARE @Page_Size int;
DECLARE @Page_Number int;
DECLARE @Lower_Bound int;
DECLARE @Upper_Bound int;
SET @Page_Size = 30;
SET @Page_Number = 30000;
SET @Lower_Bound = (@Page_Number - 1) * @Page_Size;
--SET @Upper_Bound = @Page_Number * @Page_Size;
WITH Customers AS--(Row_Numbr, Record_Id, First_Name,
Middle_Name, Last_Name, Email, Telephone) AS
(
SELECT ROW_NUMBER()
OVER
(ORDER BY Account.Customer.Record_Id) AS Row_Numbr, *
FROM Account.Customer
)
SELECT top(@Page_Size) *
FROM Customers
WHERE Row_Numbr > @Lower_Bound--
AND Row_Numbr <= @Upper_Bound -- This is suppose to be faster
--SELECT * FROM Customers
--WHERE Row_Numbr > @Lower_Bound
-- AND Row_Numbr <= @Upper_Bound
【问题讨论】:
-
执行计划是怎么说的?
-
你有什么索引?你能发布创建表脚本吗?
-
主键是Record_Id所以它是表索引,执行计划说“97%用于聚集索引扫描”,“2%用于过滤”。
标签: sql-server performance tsql pagination