SQL1:
select * from
(select row_number() over(order by id) as row,* from T1) as TT
where row between 11200 and 11300SQL2:
select row_number() over(order by id) as row,* from T1像这种分页查询假设T1有几十亿条记录....哪条语句执行速度快?
SQL1快?因为只查询100条数据? 那里面包含的SQL2怎么解释? 不是先查询SQL2得到结果再在里面筛选吗?SQL2快?那我只查询100条数据难道一定要先得到全部的几十亿条数据?
select * from
(select row_number() over(order by id) as row,* from T1) as TT
where row between 11200 and 11300SQL2:
select row_number() over(order by id) as row,* from T1像这种分页查询假设T1有几十亿条记录....哪条语句执行速度快?
SQL1快?因为只查询100条数据? 那里面包含的SQL2怎么解释? 不是先查询SQL2得到结果再在里面筛选吗?SQL2快?那我只查询100条数据难道一定要先得到全部的几十亿条数据?
select row_number() over(order by id) as row,* from T1
) as TT
where row between 11200 and 11300
子查询只会根据ID扫描聚集索引列,确定100条的范围而已,
SQL Server不会笨到先全部取出来再去挑那100条