Oracle 表连接 导致排序错乱
来源:互联网 发布:淘宝卖家基本设置出错 编辑:程序博客网 时间:2024/04/30 13:16
天气天热,周末在家敲代码发现一个奇怪的sql,在使用left join 表连接左查询的时候,A left join B,之前A表排好的序,突然错乱了,第一行记录跑到了最后以后,之前的降序变成了升序! 模拟sql如下
SELECT
A .*
FROM
(
SELECT
A .*
FROM
(
SELECT
A .*,
ROWNUM r
FROM
(
SELECT
*
FROM
tporder A
WHERE
TO_CHAR (A .PLATTIME, 'yyyy-mm-dd') >='2015-08-09'
AND TO_CHAR (A .PLATTIME, 'yyyy-mm-dd') <='2015-08-09'
AND A . TYPE IN (0, 1, 23, 24, 25, 30)
AND A .BUSI_TYPE = 1
ORDER BY
PLATTIME DESC
) A
LEFT JOIN TMERINFO b ON A .STOREID = b.TACCOUNTID
) A
LEFT JOIN tbankmore c ON A .CARD_BANK_TP = c. ID
WHERE
A .r <=20
) A
left JOIN TpRANSACTION tr ON A.ID = tr.TORDERID(执行这句话的时候之前按照plattime降序-->升序)。
折腾了好久没想起来解决方案,突然就像看看这个sql的执行计划,我们知道表连接有3中方式,嵌套内循环,排序合并连接,哈希连接,根据我们这个sql的情况,由于A表的id和B表的torder做连接,A表的主键肯定是经过排序的,默认是升序,oracle优化引擎肯定是用了排序合并连接的算法,导致问题发生的。解决方法就是为b表的torderid字段建立降序索引,这样合并的时候不仅可以提高sql执行效率,而且把刚才的那种问题也避免了!
- Oracle 表连接 导致排序错乱
- Oracle中rownum和 order by联合使用导致排序错乱
- oracle表连接--->排序合并连接
- Oracle下用rownum进行分页时排序的错乱
- SessionState设置导致地址错乱
- Checkbox复用导致错乱
- oracle表连接------>排序合并连接(Merge Sort Join)
- oracle 表连接 - sort merge joins 排序合并连接
- oracle表连接------>排序合并连接(Merge Sort Join)
- oracle 监听blocked导致数据库无法连接
- 解决使用HIBERNATE对ORACLE数据库中数据进行排序分页错乱的问题
- 解决使用HIBERNATE对ORACLE数据库中数据进行排序分页错乱的问题
- ListView复用机制导致数据错乱
- 删除群成员导致的数据错乱
- ListView复用导致CheckBox状态错乱
- ListVIew复用导致数据错乱
- RecyclerView删除Item导致位置错乱问题
- oracle连接数设置过大,导致oracle启动不了
- [Android]Volley在没有网络时读取图片缓存时出现的问题
- LDS文件格式分析
- x86架构和arm架构处理器分析
- mybatis 源码系列 组件之 Transaction
- 百度编辑器多图上传返回图片绝对路径问题
- Oracle 表连接 导致排序错乱
- vi的复制粘贴命令
- linux 信号signal和sigaction理解
- Andoid之——缓存杂项
- 加载指定包名下的所有类或根据类的annotation进行过滤的工具类
- Kth Largest Element in an Array
- Shell Script - 追踪与debug
- 宝宝心声
- 分层驱动将IRP分解成多个IRP