zoukankan      html  css  js  c++  java
  • SQL Server分页查询进化史

    分页查询一直SQL Server的一个硬伤,就是是经过一些进化,比起MySql的limit还是有一些差距。

    一、条件过滤(适应用所有版本)

    条件过滤的方法有很多,而思路就是利用集合的差集选择出目标集合以达到分页查询的效果,以下是最常见的一个思路

    SELECT TOP @PageSize * FROM TableName
    WHERE ID NOT IN (SELECT TOP (@PageSize * (@PageIndex - 1)) ID FROM TableName ORDER BY ID)
    ORDER BY ID

    @PageSize是指每页记录数

    @PageIndex是指页数

    TableName是要查询的表名

    ID一般是指主键,当然其他唯一值也是可以的, 如果不是唯一值分页结果就会不准确

    二、行序号(适应2005及以后版本)

    2005版本开始加入新指令,用来给行添加序号,而思路就是通过判断行序号来达到分页查询的效果

    SELECT TOP (@PageSize) *
    FROM (SELECT ROW_NUMBER() OVER(ORDER BY ID) AS RowIndex, * FROM TableName) NewTableName
    WHERE RowIndex>(@PageSize * (@PageIndex - 1))

    ROW_NUMBER() OVER(ORDER BY ID)是指按ID排序生成行序号

    RowIndex是行序号的列名

    NewTableName是包括行序号新表的表名

    PS:这种分页查询会有行序号

    三、排序分页参数(适应2012及以后版本)

    2012版本开始排序指令加入了新的参数,可以用来分页查询

    SELECT * FROM TableName
    ORDER BY ID
    OFFSET (@PageSize * (@PageIndex - 1)) ROWS
    FETCH NEXT (@PageSize) ROWS ONLY

    OFFSET是指跳过多少条记录,FETCH NEXT是指查询多少条记录。这种格式和EF里面的Skip和Take类似

  • 相关阅读:
    App测试总脚本1.30.py
    adb安装中的platform-tools文件的生成问题
    App测试总脚本1.20
    App测试总脚本1.10(使用了列表推导式)
    APP网络测试要点和弱网模拟
    算法1—冒泡排序
    三次握手和四次挥手
    测试基础总结
    四道题设计用例
    使用复杂条件下的if选择结构
  • 原文地址:https://www.cnblogs.com/TanSea/p/SqlServer-Paging-Query.html
Copyright © 2011-2022 走看看