【广告贴】【SQL 效率】选出10000000-10000010行的结果,怎么写?Oracle(Sql Server / Access 如能做到高效也有分)
借人气发个广告贴,见:
http://community.csdn.net/Expert/topic/5005/5005002.xml?temp=.4698908
===========================================================
老话重提了,原帖分析语法,见:
http://community.csdn.net/Expert/topic/4788/4788401.xml?temp=.3034632
问题概要:现在分析效率,要选出海量记录中的一段,以下方案中居然只有MySQL能做到高效执行,望达人指教。
【方案1】Oracle by 楼主
select (
select (
select * from xxx
) where rowid < 10000010
) where rowid > 10000000;
问题:如果选择的是100到110行,很快,但如果是10000000到10000010行,暴慢无比。复杂度是前者的100000倍。我认为应该有复杂度相等的方法才对。
【方案2】MSSQL/Access(1) by liuxiaoyi666(MSMVP小猪妹马甲之八卦兔子) 信誉:126
select top 110 * from tab where id not in(select top 100 id from tab order by id) order by id
问题:where id not in(...)语句效率是集合操作,效率比Oracle的挨个数值比较还要低。
【方案3】MSSQL/Access(2) by 123xie(xie)
str="select top 110 * from tab order by id desc"
rs.open str
rs.move(100)
问题:数据库需要把1000010行数据全部返回给应用服务器(如iis),效率极低。
【方案4】MySQL by 楼主
select * from xxxx limit x1, x2
目前最佳方案,MySQL内置支持,效率好像还比较高,没有拿海量数据测试过。