在sql 中使用rownum,这个估计大家都经常使用到,特别是使用存储过程进行数据分页时,更是如此了。
但是,rownum的在数据库中的效率并不高,应为他经常是在等到所有的数据都检索到了,才进行分配序号的,
在性能上存在着很大的问题!
为此,我们可以利用oracle自己的一个分析函数(row_number() over())来解决此问题, 这样来检索数据的速度又大幅度的提升!
具体的例子如下:
select * from (
select v.*, rownum rownums
from (select * from AZV_製商品 t
where t.製商品コード like 'C%') v
order by 製商品コード)
where rownums >= 1 and rownums <= 20
这个查询需要大约8秒钟的时间!但是下面这个同样的查询仅仅不到1秒的时间就可以了,可见差距之大呀!
select * from (
select v.*, row_number() over(order by v.製商品コード) rownums
from (select * from AZV_製商品 t
where t.製商品コード like 'C%') v)
where rownums >= 1 and rownums <= 20
以上如有问题,请多多指教!