用的sqlserver 2008数据库
总数据量是1933831,就算200万条数据哇
提取的是第 1500001 到 1500050 这50条数据
- SQL code
select top 50 * from testwhere 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 awhere 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
------解决方案--------------------------------------------------------