• 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
  • 相关阅读:
    echarts饼状图位置设置
    去除echarts饼状图的引导线
    VS2008里的代码如何格式化
    使用ADO如何获得SQLSERVER 2K的数据库名的列表
    CStdioFile.WriteString无法向文件写入中文
    使用ODBC 数据库 ,运行程序时 出现 “遇到不适当的参数”
    CListCtrl消息及解释
    VC的CListCtrl控件
    找不到Microsoft Access Driver(*.mdb)ODBC驱动程序的安装例程。请重新安装驱动
    WebBrowser 控件-说明
  • 原文地址:https://www.cnblogs.com/toge/p/6114736.html
Copyright © 2020-2023  润新知