用于从具有最佳SQL的大表中选择记录簇的SQL

时间:2011-10-03 07:34:37

标签: sql-server-2005 tsql

我正在尝试在我的一个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并且不运行上述查询。我想知道是否有比这更好的方法。

提前感谢您的时间和帮助。

1 个答案:

答案 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