4

目前,这个 sql 查询能够在我确定的行之间进行选择。但是有没有更好的方法呢?

  select * from (select *, ROW_NUMBER() over (order by Id desc) as RowId 
                 from tblUsersMessages ) dt
  where RowId between 10 and 25
4

1 回答 1

3

取决于你的索引。

有时这可能会更好

SELECT *
FROM   tblUsersMessages
WHERE  Id IN (SELECT Id
              FROM   (select Id,
                             ROW_NUMBER() over (order by Id desc) as RowId
                      from   tblUsersMessages) dt
              WHERE  RowId between 10 and 25)  

如果存在可用于快速查找Id范围内的值的较窄索引。有关演示可能出现的问题类型的示例,请参见我的答案here 。

您需要检查SET STATISTICS IO ON特定案例的执行计划和输出。

于 2011-09-23T11:08:03.940 回答