zoukankan      html  css  js  c++  java
  • Sql Server 数据分页

    1、引言
    在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定量的数据,这就是数据要分页。

    2、常用的数据分页语法

    方法1 定位法 (利用ID大于多少)

    先查出 top 300000,再聚合取这个集合中最大的Id1,再过滤 id大于id1的集合(上图中使用到索引),再取top 10 条。

    语句形式:

    select top 10 * from tbl_FlightsDetail where FlightsDetailID>(
           select max(FlightsDetailID) from ( 
                  select top 3000000 FlightsDetailID from tbl_FlightsDetail order by FlightsDetailID
           ) as t
    ) order by FlightsDetailID

    方法2 (利用Not In)

    和方法一类似,只是过滤where条件不一样,这里用到的是not in,上图中没有用到索引,耗时8秒。如果 FlightsDetailID不是索引的话,方法1和该方法将差不多。

    语句形式:
    select top 10* from tbl_FlightsDetail where FlightsDetailID not in (
           select top 3000000 FlightsDetailID from tbl_FlightsDetail order by FlightsDetailID
    ) order by FlightsDetailID

    方法3 (利用颠颠倒倒top)

    先取 前面3000010条记录,再倒序,这时再取前面10条即是300001 到300010条记录,没有用到索引,耗时11秒
    语句形式:
    select top 10* from (
           select top 3000010* from tbl_FlightsDetail order by FlightsDetailID
    ) as t  order by t.FlightsDetailID desc

    方法4 (ROW_NUMBER()函数)

    Sql 2005版本或以上支持,也没用到索引,耗时2秒,速度还不错。
    语句形式:
    select * from (
           select *,ROW_NUMBER() OVER (ORDER BY FlightsDetailID) as rank from tbl_FlightsDetail
    )  as t where t.rank between 3000001 and 3000010

    方法5 (利用IN)

    多次执行之后一般维持在4秒左右,用到索引,非常不错,计划图还很长,只截取部分,可能是绕的多一点。
    select top 10 * from tbl_FlightsDetail  where FlightsDetailID in( 
           select top 10 FlightsDetailID from(  
                  select top 3000010 FlightsDetailID from tbl_FlightsDetail order by FlightsDetailID
           ) as t order by t.FlightsDetailID desc 
    ) order by FlightsDetailID
  • 相关阅读:
    2018 eclipse安装反编译插件
    Buffer flip()方法
    区块链2
    Mist 转移默认区块存储位置方法
    区块链1
    如何在Ubuntu下安装”.deb“、”.bin“、”.tar.gz“、”.tar.bz2“格式的软件包!
    eclipse 性能调优之内存分配
    linux中搭建java开发环境
    在 Ubuntu 14.04 上安装 Ubuntu Tweak 0.8.8
    Ubuntu各个版本的介绍
  • 原文地址:https://www.cnblogs.com/toge/p/6114736.html
Copyright © 2011-2022 走看看