用ROWNUM跟ROWID来进行高效率的查询。
ROWNUM:是一个伪列,当返回一个查询的结果时,就有了ROWNUM。
ROWID: 是一条记录的实际物理地址,用ROWID定位比index更快。
SELECT * FROM test WHERE ROWID IN ( SELECT rid FROM ( SELECT rid,ROWNUM AS rn FROM ( SELECT ROWID rid FROM test WHERE a1 LIKE '%%' ORDER BY id ) t1 WHERE ROWNUM<=1000000 ) t2 WHERE rn>=999990) ORDER BY id;
步骤:
1.最里层的根据条件查询,排序取出 ROWID,结果集为t1。
2.在t1中过滤 ROWNUM<=1000000的记录数,获取rid跟rn的结果集t2
3.在t2中过滤rn>=999990的记录,获取rid(拿到想要范围内的数据的ROWID了,)
4.用WHERE ROWID IN拿到之前结果集中的rid,来找到test表中的记录。
参考: