SQL,从表中选择Nth到Mth记录,哪个查询更有效?

时间:2010-06-30 03:23:41

标签: sql-server

面试问题:

编写SQL Server查询以返回表A的第30到第40条记录

我的回答:

select top 10 * from (select top 40 * from tb desc) asc

select top 40 * from A where id not in(select top 30 id from A) 

以上哪个更有效率?为什么呢?

2 个答案:

答案 0 :(得分:6)

不要使用其中任何一种,你可以直接选择那些30-40行

请参阅:Row Offset in SQL Server

答案 1 :(得分:1)

使用Row_number()可能是最好的方法!

;With CTETable AS 
( 
  SELECT ROW_NUMBER() OVER (ORDER BY Column_Name DESC) AS ROW_NUM, * FROM tb WHERE <CONDITION> 
) 

SELECT Column_List FROM CTETable WHERE ROW_NUM BETWEEN <StartNum> AND <EndNum>