初一七月

          你必須承認,我們生存的這個世界取決于自身的能力而非別人的保護(AW)
          隨筆 - 23, 文章 - 0, 評論 - 11, 引用 - 0
          數據加載中……

          oracle分頁查找時,start與size在ibatis中的設置

          使用oracle + ibatis進行數據分頁查找時,對傳入的參數start與size,進行如下查找語句
          select * from
            (select t.*, romnum rn from
              (select * from user
                 where score > #score# 
                 order by $orderby$
               ) t 
             where rownum <= #start# + #size# )
          where rn > #start#
          在數據量較少時,以上語句沒有問題,但是在達到500w+數據量時,就會發生急劇的性能下降,經過測試,發現應該改為以下的語句,就可以避免,在千萬數據以上仍可以在百毫秒得出結果
          select * from
            (select t.*, romnum rn from
              (select * from user
                 where score > #score# 
                 order by $orderby$
               ) t 
             where rownum <= $start$ + $end$ )
          where rn > #start#

          因為ibatis會將#xxx#參數解析為PreparedStatement中的?,但是如果使用#start#+#size#,會產生?+?的語句,影響oracle語句動態解析,實際上這個參數在執行時完全可以先計算和,再作為一個值傳入語句,采用$start$+$size$正是做到了這點,大大加快了執行速度

          posted on 2012-07-13 14:41 初一七月 閱讀(822) 評論(0)  編輯  收藏 所屬分類: DB

          主站蜘蛛池模板: 泰顺县| 铜陵市| 瓦房店市| 屯门区| 兰州市| 达州市| 呼玛县| 安岳县| 瓦房店市| 昭觉县| 台东市| 延寿县| 安庆市| 定陶县| 治县。| 安乡县| 黄梅县| 兴仁县| 堆龙德庆县| 济宁市| 三穗县| 阳山县| 上饶县| 绍兴市| 灯塔市| 山阳县| 东方市| 南昌市| 花莲县| 莲花县| 盐山县| 铜梁县| 根河市| 利川市| 忻州市| 双辽市| 宜宾市| 洛南县| 吉木乃县| 昌乐县| 廉江市|