oracle分页查找时,start与size在ibatis中的设置

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$正是做到了这点,大大加快了执行速度

你可能感兴趣的:(oracle分页查找时,start与size在ibatis中的设置)