在我的应用中使用了Rownumber函数,由于我的非正常理解造成了排序混乱。现在晒出来讨论。
一、初识rownumber
rownumber() 函数允许开发人员动态地将行号指定给结果集。 如果去掉 row_next 子句( ROW_NEXT BETWEEN ? and ? ),那么将返回所有匹配选择标准的行。 上面使用的 SELECT * FROM 子句可以看作一个临时表,里面存有匹配选择标准的整个结果集,然后从这个临时表中返回落在给定行范围内的结果集。
使用 rownumber() 功能时对系统会有额外的性能影响,因为数据库首先要获取所有匹配选择标准的行,然后再返回落在给定范围内的那些行。
我们遇到的性能问题就是系统在排序时建的临时表过大,我们采用建一个裸设备的表空间。
二、犯错展示
所以呢,我直观的认为rownumber是对我传的结果集取分页游标。我就将结果集排好序给不减少临时表利用空间吗。sql如下:
Java代码
1.select * from (select .... rownumber() over() as rn from photo_ref where ...
order by storetime desc )as a1 where a1.rn between 0 and 3000
select * from (select .... rownumber() over() as rn from photo_ref where ...
order by storetime desc )as a1 where a1.rn between 0 and 3000
出来的结果有问题了,分页起始游标每次都不在一个位置,但结果集是正确排序的。
比较正确用法的sql:
Java代码
1.select * from (select .... rownumber() over(
order by storetime desc) as rn from photo_ref where ... )as a1 where a1.rn between 0 and 3000
select * from (select .... rownumber() over(
order by storetime desc) as rn from photo_ref where ... )as a1 where a1.rn between 0 and 3000
可见必须在over()中排序,那就好好查查原因吧。
三、找到原因
db2有3个排序函数,rank如果出現两个相同的数据,那么后面的数据就会直接跳过这个排名,而dense_rank则不会,差別更大的是,row_number哪怕是两个数据完全相同,排名也会不一样。
1、rank
rank 函数本身没有参数。这是因为 rank 函数不对任何参数执行任何计算。相反,rank 函数只是着眼于行集合--以及每一行在集合中的位置--正如排序方式所定义的那样。
对排列函数的而言, 分区(partition) 和 集合(set)这两个术语是等价的。在 PARTITION 子句后面,我们有一个 ORDER BY 子句,这个子句定义了分区内的排序方式。
2、row_number
Row_number 也执行一次排列,但是当碰到有结的情况时,结中的行要进行任意的(也就是说,不是确定的)排序。这在对有重复值的数据进行分析时很有用。row_number 函数一个有趣的方面是它是惟一不要求提供排序方式的排列函数。如果在没有指定排序方式的情况下调用 row_number 函数,则所有的行都将被当作结中的行来对待,因而这些行是任意排序的。这对于在输出中给行排序来说很有用。
四、结论
所以,我开始的想法错了。不错、努力、继续、希望。
分享到:
相关推荐
DB2数值函数简介及使用 1、取绝对值的函数:abs、absval 2、向上取整:ceil、ceiling 3、向下取整数:floor 4、求M的n次幂:power(M,n) 5、随机数:rand(m)函数 6、四舍五入:round (m,n) 7、将数值转换为字符串形式...
DB2-SQL 数据库函数 DB2-SQL 数据库函数
DB2常用函数详解,包括进200个常用函数,很详细
DB2和HIVE的函数相互转换,大部分函数都实现了的。
db2的书籍比较少,这个是db2中关于函数部分的详细解释
db2里对字符串处理的函数大全,涵盖常见和不常见的很多函数
自己整理的DB2函数大全,希望对学习和使用DB2的兄弟们能有所帮助
数据库函数整理,包括db2和mysql的函数使用。
DB2函数名称及举例,例如avg,coalesce,concat,count,replace,space,to_char
主要记录在工作中,初识db2遇到的一些问题 db2字符串分隔,函数,过程的使用
db2函数大全 函数大全 聚集函数 标量函数 分组函数 平均差值函数 方差函数
db2函数大全 常用总结的db2的所有方法等
db2,oracle函数大全合集,db2,oracle函数大全合集,db2,oracle函数大全合集,db2,oracle函数大全合集
DB2相关资料,相关函数及其错误码 很好的资料
DB2 日常所需函数都有,详细解释,开发人员和DBA 所需要掌握的必备函数
db2调自定义函数的几个小例题,可以用于借鉴一下。
在 DB2 数据库系统监控中,经常会遇到 CPU 资源使用过高问题,造成此类问题的原因很多,但最主要的原因有两个,第一是过多的逻辑 I/O 读取,第二就是过多的排序 (Sort),这两个因素有时也称为 CPU 的两大杀手。...
DB2各类函数的分类总汇文档 1. 聚合函数 2. 类型转换函数 3. 数学函数 4. 字符串函数 5. 日期时间函数 6. XML 函数 7. 分区函数 8. 安全函数 9. 其他
DB2数据库函数大全: DB2 函数简单解释 初学者适用~~~
DB2 SQL 数学函数 DB2 SQL 数学函数 DB2 SQL 数学函数 DB2 SQL 数学函数