日期:2014-05-17  浏览次数:20487 次

ROW_NUMBER 做了个测试,发现和网上说的不一样呢
用的sqlserver 2008数据库

总数据量是1933831,就算200万条数据哇
提取的是第 1500001 到 1500050 这50条数据

SQL code
select top 50 * from test
where id not in (select top 1500000 id from test )
order by id ASC

耗时 00:00:02

SQL code
select * from(select ROW_NUMBER() over(order by id ASC)as idnum,* from test) as a
where idnum between 1500001 and 1500050

耗时 00:00:10

不是说大数据量ROW_NUMBER效率要高得嘛,咋我测试出来差别这么大呢?是数据量小了还是方法没对???

------解决方案--------------------
查询分析器里面测试最好先清理下缓存

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
------解决方案--------------------
row_number说的效率又不是这个
说的是计算行号的效率


你看一下执行计划,分析这两个sql倒底做了什么
------解决方案--------------------
select top 50 * from test
where id not in (select top 1500000 id from test )
order by id ASC

这个只适合ID连续的情况下才能用,如果你想效率的话用oracle
------解决方案--------------------
探讨

这个和id连续与否没关系吧