jsp + oracle 排序分页 高效sql语句
2011-11-23 09:01
351 查看
oracle 分页
1. 最好还是利用分析函数
row_number() over ( partition by col1 order by col2 )
比如想取出100-150条记录,按照tname排序
select tname,tabtype from (
select tname,tabtype,row_number() over ( order by tname ) rn from tab
)
where rn between 100 and 150;
2. 直接使用rownum 虚列
select tname,tabtype from (
select tname,tabtype,rownum rn from tab where rownum <= 150
)
where rn >= 100;
使用序列不能基于整个记录集合进行排序,如果指定了order by子句,排序的的是选出来的记录集的排序.
------------------------------------------------------------------------
经过测试,在100万条数据的表中,检索数据的时候,方法2的速度要比方法1要快的.
排序分页
说明:Oracle下用rownum进行分页时 很容易出现排序的错乱。
但多套一层select 就能很好的解决该问题,特此记录,语句如下:
select t2.* from (select t1.*, rownum rn from (select * from tb_courseinfo order by rownum desc )t1 where rownum <= 150 )t2 where rn >100
不懂具体效率怎么样,和上边一样应该还可以。
实际例子代码如下
int curpage=1;//当前页
int page_record=20;//每页显示的记录数
int introwcount=0; // 记录数
if(request.getParameter("page")==null||Integer.parseInt(request.getParameter("page"))<=0)
{
curpage = 0;
}
else
{
curpage=Integer.parseInt(request.getParameter("page"))-1;//获取传递的值,需要显示的页
}
String sql = "select t2.* from (select t1.*, rownum rn from (select * from tb_courseinfo order by rownum desc )t1 where rownum <= "+(curpage+1)*page_record+" )t2 where rn > "+curpage*page_record;
1. 最好还是利用分析函数
row_number() over ( partition by col1 order by col2 )
比如想取出100-150条记录,按照tname排序
select tname,tabtype from (
select tname,tabtype,row_number() over ( order by tname ) rn from tab
)
where rn between 100 and 150;
2. 直接使用rownum 虚列
select tname,tabtype from (
select tname,tabtype,rownum rn from tab where rownum <= 150
)
where rn >= 100;
使用序列不能基于整个记录集合进行排序,如果指定了order by子句,排序的的是选出来的记录集的排序.
------------------------------------------------------------------------
经过测试,在100万条数据的表中,检索数据的时候,方法2的速度要比方法1要快的.
排序分页
说明:Oracle下用rownum进行分页时 很容易出现排序的错乱。
但多套一层select 就能很好的解决该问题,特此记录,语句如下:
select t2.* from (select t1.*, rownum rn from (select * from tb_courseinfo order by rownum desc )t1 where rownum <= 150 )t2 where rn >100
不懂具体效率怎么样,和上边一样应该还可以。
实际例子代码如下
int curpage=1;//当前页
int page_record=20;//每页显示的记录数
int introwcount=0; // 记录数
if(request.getParameter("page")==null||Integer.parseInt(request.getParameter("page"))<=0)
{
curpage = 0;
}
else
{
curpage=Integer.parseInt(request.getParameter("page"))-1;//获取传递的值,需要显示的页
}
String sql = "select t2.* from (select t1.*, rownum rn from (select * from tb_courseinfo order by rownum desc )t1 where rownum <= "+(curpage+1)*page_record+" )t2 where rn > "+curpage*page_record;
相关文章推荐
- C#拼接SQL语句,SQL Server 2005+,多行多列大数据量情况下,使用ROW_NUMBER实现的高效分页排序
- oracle排序并分页sql语句
- Oracle 分页查询的 SQL 语句
- oracle 分页查询和sql server 分页查询 的sql语句
- Oracle分页SQL语句
- 最高效的oracle分页语句,你会了吗?
- mysql,mssql,oracle分页通用sql语句
- Oracle高效SQL语句原则 转载
- Oracle 中文字段进行排序的sql语句
- ORACLE分页SQL语句
- oracle sql语句分页
- MySQL数据库limit分页、排序-SQL语句示例
- ORACLE中用rownum分页并排序的SQL语句
- [Oracle]高效的SQL语句之分析函数(一)--sum()
- ORACLE中用rownum分页并排序的SQL语句
- oracle 查询分页sql语句
- Oracle经典sql语句总结@sql-plus重点函数串讲与sql语句案例@中文排序详讲).doc
- Oracle中的sql语句分页性能测试
- Oracle 分页和排序常用的4条查询语句