Oracle 表串連 導致排序錯亂

來源:互聯網
上載者:User

標籤:oracle   sql   排序   串連   

天氣天熱,周末在家敲代碼發現一個奇怪的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 表串連 導致排序錯亂

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.