使用oracle的olap函数优化分页查询
来源:互联网 发布:php后期静态绑定有啥用 编辑:程序博客网 时间:2024/05/21 06:45
周代码走查时发现由于分页功能需要根据总条数计算分页数 ,而目前项目组内的普遍做法是进行两次sql查询,一次用count(*)获得总条数,一次获取真正的展现数据。其实我们可以使用oracle提供的olap函数对此进行优化,通过伪列:count(*) over()即可获得当前sql的总条数。
比如
select t.*,count(*) over() from dual
会返回总条数为1。
olap函数主要用于统计分析,熟练掌握能很好的提高sql执行效率。
count(*) over() 具体功能描述如下:
对一组内发生的事情进行累积计数,如果指定*或一些非空常数,count将对所有行计数,如果指定一个表达式,count返回表达式非空赋值的计数,当有相同值出现时,这些相等的值都会被纳入被计算的值;可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。
SAMPLE:下面例子中计算每个员工在按薪水排序中当前行附近薪水在[n-50,n+150]之间的行数,n表示当前行的薪水
例如,Philtanker的薪水2200,排在他之前的行中薪水大于等于2200-50的有1行,排在他之后的行中薪水小于等于2200+150的行没有,所以count计数值cnt3为2(包括自己当前行);cnt2值相当于小于等于当前行的SALARY值的所有行数
sql如下:
SELECT last_name, salary, COUNT(*) OVER () AS cnt1,
COUNT(*) OVER (ORDER BY salary) AS cnt2,
COUNT(*) OVER (ORDER BY salary RANGE BETWEEN 50 PRECEDING AND 150 FOLLOWING) AS cnt3 FROM employees;
COUNT(*) OVER (ORDER BY salary) AS cnt2,
COUNT(*) OVER (ORDER BY salary RANGE BETWEEN 50 PRECEDING AND 150 FOLLOWING) AS cnt3 FROM employees;
结果如下 :
LAST_NAME SALARY CNT2 CNT2 CNT3Olson 210010713Markle220010732Philtanker220010732Landry240010758Gee240010758Colmenares25001071110Patel25001071010
- 使用oracle的olap函数优化分页查询
- 使用oracle的olap函数优化分页查询
- 分页查询优化--oracle
- Oracle的分页查询语句优化
- DB2 OLAP函数的使用
- DB2 OLAP函数的使用
- Oracle分页查询性能优化
- oracle分页查询及rownum的使用
- oracle olap函数
- ORACLE OLAP 函数
- Oracle的分页查询
- Oracle的分页查询
- Oracle的分页查询
- Oracle的分页查询
- Oracle的分页查询
- oracle的分页查询
- Oracle的分页查询
- ORACLE 的分页查询
- a place nearby
- 养成良好的习惯
- HP-UX 命令 及用法【转帖】
- System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
- HP-UX 命令 及用法【转帖】
- 使用oracle的olap函数优化分页查询
- 解决error:2014 Commands out of sync; you can't run this command now
- oracle数据库的优化-关于rownum操作
- 安装Android的Eclipse插件ADT遇到错误“requires 'org.eclipse.gef 0.0.0' but it could not be found”
- oracle日期函数集锦
- Linux系统启动的基本过程和步骤
- SRM 459 500p && hust1080 NumberPyramids
- add user to group
- PHP之正则表达式入门