传统的分页是这样的
select * from (select rownum rw, * from table_name order by key_column) where rw >= ? and rw < ?当表比较小时这样做还可以接受,但是表比较大时就有问题了select rownum rw, * from table_name order by key_column
这一语句运行比较缓慢并且消耗资源较多怎么优化好?
select * from (select rownum rw, * from table_name order by key_column) where rw >= ? and rw < ?当表比较小时这样做还可以接受,但是表比较大时就有问题了select rownum rw, * from table_name order by key_column
这一语句运行比较缓慢并且消耗资源较多怎么优化好?
解决方案 »
- oracle 如何修改列递增,在线等...
- 学Oracle 需要下载哪些软件?
- 如何实现下面的查询语句?
- Help!我用VC访问oracle,能从数据库中读出数据,但写入时出错了,m_pRecordset->AddNew();的时候出错了,大家帮帮忙!
- 50分sql题目
- 在线等,如何打开监听,为何报the listener supports no services
- 江湖救急,十万火急-100分急问客户端和服务器端的字符集一致时发生的字符集乱码问题
- 一个初级的问题,谢谢!
- p4+oracle817,安装后,managerserver无法启动,help!!!~~~
- sqlload 可以导入非指定文件嘛?
- 应该是简单oracle语法错误吧。
- Oracle 如何获取上个月的第一天星期天和最后一个星期天的日期
order by key_column) where rw >= ?
select * from (select rownum rw, * from table_name where rw < ? order by key_column) where rw >= ?
select *
from (select a.*,row_number() over(order by key_column) rw
from tb a)
where rw >= ? and rw < ?select *
from (select a.*,rownum rw from (select * from table_name order by key_column) a
where rownum <m)
where rw>=n
--你的的这样
select *
from (select a.*,rownum rw from (select * from table_name order by key_column) a
)
where rw >= ? and rw < ?
(
select rownum rw, t.* from
(select * from table_name order by key_column) t
where rownum < ?
)
where rw > ?
select *
from (select a.*,rownum rw from (select * from table_name order by key_column) a
where rownum <m)
where rw>=n
=========
这个写法比较快 但也要一分多钟
起因是我的分页sql让dba杀了
另外一种写法是between,显然没这个快。
如果还需要追求速度,我觉得可能要考虑其它的方法了,单单的去优化分页查询语句,没什么可优化的了。