您的位置:首页 > 博客中心 > 数据库 >

sql分页 sql server,oracle,db2,mysql

时间:2022-03-14 00:29

场景一(假设用户只会浏览前面数十页的情况):

思路:取出 页大小*页数的数据,然后拿去 intStartIndex和intEndIndex直接的数据; 优点: 书写简单,通用,适用于用户只会浏览最初几页的情况 缺点:如果数据量超过千万,读取最后几页时会很慢。   【sql server】:   select top 页大小*页数 * from table1 ; 获得数据,然后通过计算拿对应的数据。   【oracle】:   select * from (select TMP_TAB.*, rownum as RN    from (select * from table1) TMP_TAB) WHERE RN<=页大小*页数   【db2】:   select * from table1 fetch first 页大小*页数 rows only   【mysql】:  select * from table1 limit  页大小*页数 注:limit后如果是一个参数则从0开始   场景二(用户随意访问具体页): 思路: 取出对应的start和end的页条数 优点:能直接拿取, 缺点:书写复杂,且sql sqrver 必须指定一个主键或排序才能完成分页。 【sql server 2000版本】:需要主键id  select top 页大小 from table1 where id not in( select top 页大小*页数 id from table1 order by id) order by id   【sql server 2005或以上】:需要排序字段  select * from (select row_number() over (order by id) as rn,* from table1 ) where rn>=页开始 and rn =< 页大小*页数) 【db2】:需要排序字段,比sql2005函数少了个下杠号 select * from (select rownumber() over (order by id) as rn,* from table1 ) where rn>=页开始 and rn =< 页大小*页数) 【oracle】  select * from (select TMP_TAB.*, rownum as RN    from (select * from table1) TMP_TAB where RN<=页大小*页数) WHERE RN>=页开始 【mysql】:    select * from table1 limit 页开始,页大小      

热门排行

今日推荐

热门手游