初一七月

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

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

          使用oracle + ibatis進行數(shù)據(jù)分頁查找時,對傳入的參數(shù)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#
          在數(shù)據(jù)量較少時,以上語句沒有問題,但是在達到500w+數(shù)據(jù)量時,就會發(fā)生急劇的性能下降,經(jīng)過測試,發(fā)現(xiàn)應(yīng)該改為以下的語句,就可以避免,在千萬數(shù)據(jù)以上仍可以在百毫秒得出結(jié)果
          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#參數(shù)解析為PreparedStatement中的?,但是如果使用#start#+#size#,會產(chǎn)生?+?的語句,影響oracle語句動態(tài)解析,實際上這個參數(shù)在執(zhí)行時完全可以先計算和,再作為一個值傳入語句,采用$start$+$size$正是做到了這點,大大加快了執(zhí)行速度

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

          主站蜘蛛池模板: 调兵山市| 南通市| 凤庆县| 白山市| 沙雅县| 闻喜县| 武川县| 嘉义县| 博乐市| 德江县| 东阿县| 拉萨市| 安仁县| 五河县| 宝坻区| 洪湖市| 富平县| 金华市| 平昌县| 竹北市| 河曲县| 桃江县| 九龙城区| 沂源县| 大邑县| 保亭| 鄂伦春自治旗| 渭源县| 通化县| 紫云| 云阳县| 牟定县| 金乡县| 耒阳市| 湘潭县| 密山市| 贺兰县| 彝良县| 泰顺县| 崇州市| 汪清县|