我正在尝试在我的一个ASP网络应用程序中使用MS SQL Server 2005进行分页。要从employee表中获取10条记录,我正在运行以下SQL。
;WITH CTE AS (
SELECT EmployeeID,
[Name],
ROW_NUMBER() OVER(ORDER BY EmployeeID ASC) AS RowNo
FROM Employee
) SELECT *
FROM CTE WHERE RowNo BETWEEN 11 AND 20
这个问题是我的员工表有100万条记录,因为我运行上面的查询需要花费很多时间。我在MySQL中看到有一个名为LIMIT的短语来限制选择记录数。
请帮助我获取特定数量的记录记录,而不使用Common Table Expression并且不运行上述查询。我想知道是否有比这更好的方法。
提前感谢您的时间和帮助。
答案 0 :(得分:1)
我在一个有150.000行的表上尝试过你的查询,我尝试了一个带索引的列和一个没有索引的列。两者的执行时间都不到1秒。我想你有一个不同的问题。
因为我认为你的问题存在于其他地方,所以我试着这样做:
;WITH CTE AS (
SELECT EmployeeID,
[Name],
ROW_NUMBER() OVER(ORDER BY EmployeeID ASC) AS RowNo
FROM Employee WITH (NOLOCK)
) SELECT *
FROM CTE WHERE RowNo BETWEEN 11 AND 20