分页使用Oracle
分页使用Oracle
我对Oracle并不像我想象的那么熟悉。我有大约250k条记录,我想要每页显示100条记录。当前,我有一个存储过程,使用数据适配器、数据集和dataadapter.Fill(dataset)方法将所有25万条记录检索到数据集中。如果我有“页码”和“每页记录数”作为整数值,我可以将它们作为参数传递,那么获取只有那一部分记录的最佳方法是什么?例如,如果我传递10作为页码,120作为页数,从select语句中将给我第1880个至第2000个记录之间的内容,或者类似的,我在脑海中的计算可能有误。
我在.NET和C#中执行此操作,但这不重要,如果我可以在sql这方面搞定,那么我就很棒了。
更新:我能够使用Brian的建议,并且它运作得很好。我想要进行一些优化,但是页面的出现时间已经从一分钟减少到了4到5秒,而且我的分页控件可以很好地与我的新存储过程相结合。
admin 更改状态以发布 2023年5月24日
Ask Tom关于分页和非常有用的分析函数。
这是页面的摘录:
select * from ( select /*+ first_rows(25) */ object_id,object_name, row_number() over (order by object_id) rn from all_objects ) where rn between :n and :m order by rn;
像这样的东西应该管用:Frans Bouma的博客
SELECT * FROM ( SELECT a.*, rownum r__ FROM ( SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%' ORDER BY OrderDate DESC, ShippingDate DESC ) a WHERE rownum < ((pageNumber * pageSize) + 1 ) ) WHERE r__ >= (((pageNumber-1) * pageSize) + 1)