SqlServer 多种分页方式 详解(含简单速度测试)

目录
  • SQLServer分页方式
  • 1.Offset and Fetch 方式分页
  • 2.row_number() 方式分页
  • 3.row_number()变种
  • 4.not in/top方式分页
  • 5.not exists方式分页
  • 6.max/top方式分页

SQLServer分页方式

附带50万数据分页时间[本机访问|已重启SQL服务|无其他程序干扰][非索引排序]
环境 WIN7 SQL服务12.04 SQL管理器SSMS14.01

1.Offset and Fetch 方式分页

[SqlServer2012+] OFFSET 起始值 ROWS FETCH NEXT 每页条数 ROWS ONLY

1.分页条件不能重复,建议使用 分页条件+主键 一起作为 分页参数
2.分页语句中 FIRST=NEXT ROWS=ROW
3.不使用排序可以用 order by (select 1)

使用 OFFSET FETCH 方式分页必须带order by key 其中key 必须是唯一值 不然会导致错误

select * from (
select * from sysrizhi
 ) table_temp order by riqi desc,sysrizhiid desc offset 10 rows fetch next 10 rows only

50万行执行时间 770毫秒 索引排序10毫秒

select * from tcpliushui order by riqi OFFSET 100 ROWS FETCH NEXT 20 ROWS ONLY

2.row_number() 方式分页

[SqlServer2005+] row_number()over(order by 已有排序字段)rownumber 然后根据rownumber筛选

使用方式

select * from (select *, ROW_NUMBER() Over( order by  riqi desc,sysrizhiid desc ) as rowNum from (
select * from sysrizhi
  ) as table_1  ) as t where t.rowNum>10 and t.rowNum<=20

速度测试 50万行执行时间 774毫秒 索引排序10毫秒

select * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui )a
where rownumber>100 and rownumber<121

速度测试 50万行执行时间 777毫秒 索引排序13毫秒

select top 20 * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui)a
where rownumber>100

速度测试 50万行执行时间 775毫秒 索引排序15毫秒

select * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui)a
where rownumber between 101 and 120

3.row_number()变种

不基于已有字段 [SqlServer2005+]

速度测试 50万行执行时间 779毫秒 索引排序15毫秒

select *
from (
 select row_number()over(order by tempColumn)rownumber,*
 from (select top 120 tempColumn=0,* from tcpliushui where 1=1 order by riqi)a
)b
where rownumber>100

4.not in/top方式分页

速度测试 50万行执行时间 858毫秒 索引排序51毫秒

select top 20 * from tcpliushui
where tcpliushuiid not in (select top 100 tcpliushuiid from tcpliushui order by riqi)
order by riqi

5.not exists方式分页

速度测试 50万行执行时间 852毫秒 索引排序22毫秒

select top 20 * from tcpliushui
where not exists
(select 1 from (select top 100 tcpliushuiid from tcpliushui order by riqi)a where a.tcpliushuiid=tcpliushui.tcpliushuiid)
order by riqi

6.max/top方式分页

速度测试 50万行执行时间 819毫秒 索引排序12毫秒

select top 20 * from tcpliushui
where tcpliushuiid>(select max(tcpliushuiid) from (select top 100 tcpliushuiid from tcpliushui order by riqi)a)
order by riqi 

到此这篇关于SqlServer 多种分页方式 (含简单速度测试)的文章就介绍到这了,更多相关SqlServer 分页方式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同

    临近春节,心早已飞了不在工作上了,下面小编给大家整理些数据库的几种分页查询. Sql Sever 2005之前版本: select top 页大小 * from 表名 where id not in ( select top 页大小*(查询第几页-1) id from 表名 order by id ) order by id 例如: select top 10 * --10 为页大小 from [TCCLine].[dbo].[CLine_CommonImage] where id not in

  • SqlServer 2000、2005分页存储过程整理第1/3页

    sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持join的,sql server 2000的分页存储过程,也可以运行在sql server 2005上,但是性能没有sql server 2005的版本好. 在最后 我还附带了一个二分法的分页存储过程,也很好用的说哈~~ 1.SqlServer 2005: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE proc [dbo].[u

  • 高效的SQLSERVER分页查询(推荐)

    第一种方案.最简单.普通的方法: 复制代码 代码如下: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC 平均查询100次所需时间:45s 第二种方案: 复制代码 代码如下: SELECT * FROM ( SELECT TOP 30 * FROM (SELECT TOP 4503

  • 真正高效的SQLSERVER分页查询(多种方案)

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: 复制代码 代码如下: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT T

  • oracle,mysql,SqlServer三种数据库的分页查询的实例

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如:select * from table WHERE - LIMIT 10; #返回前10行select * from table WHERE - LIMIT 0,10; #返回前

  • SqlServer 多种分页方式 详解(含简单速度测试)

    目录 SQLServer分页方式 1.Offset and Fetch 方式分页 2.row_number() 方式分页 3.row_number()变种 4.not in/top方式分页 5.not exists方式分页 6.max/top方式分页 SQLServer分页方式 附带50万数据分页时间[本机访问|已重启SQL服务|无其他程序干扰][非索引排序]环境 WIN7 SQL服务12.04 SQL管理器SSMS14.01 1.Offset and Fetch 方式分页 [SqlServer

  • Django Rest framework三种分页方式详解

    前言 我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来. 因为这样会给内存造成巨大的压力,很容易就会内存溢出,所以我们希望一点一点的取. 同样,展示的时候也是一样的,我们必定会对数据进行分页显示. 本文将详细讲述DRF为我们提供的三种分页方式. 全局配置 REST_FRAMEWORK = { # 对所有分页器生效,但优先级低 'PAGE_SIZE': 5, # 每页显示5条数据 } 我们先准备好用于测试分页的数据以及序列化类 数据表 from django.d

  • javascript对象的多种合并方式详解

    目录 对象合并的多种方式(对于通过接口获取数据之后赋值给本地对象的时候极其有用) 第一种:手动赋值(很捞) 第二种:扩展运算符 第三种:Object.assign() (最推荐) 1.vue 项目清空表单 总结 对象合并的多种方式(对于通过接口获取数据之后赋值给本地对象的时候极其有用) 第一种:手动赋值(很捞) const obj1 = { name: "zs", age: 13, }; const obj2 = { name: "ls", sex: "女

  • mybatis分页插件pageHelper详解及简单实例

    mybatis分页插件pageHelper详解及简单实例 工作的框架spring springmvc mybatis3 首先使用分页插件必须先引入maven依赖,在pom.xml中添加如下 <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.5

  • Django REST Framework 分页(Pagination)详解

    在前面的DRF系列教程中,我们以博客为例介绍了序列化器, 使用基于类的视图APIView和ModelViewSet开发了针对文章资源进行增删查改的完整API端点,并详细对权限和认证(含jwt认证)进行了总结与演示.在本篇文章中我们将向你演示如何在Django REST Framework中使用分页. 分页 为什么要分页? 当你的数据库数据量非常大时,如果一次将这些数据查询出来, 必然加大了服务器内存的负载,降低了系统的运行速度.一种更好的方式是将数据分段展示给用户.如果用户在展示的分段数据中没有

  • MySQL 复制详解及简单实例

    MySQL 复制详解及简单实例 主从复制技术在MySQL中被广泛使用,主要用于同步一台服务器上的数据至多台从服务器,可以用于实现负载均衡,高可用和故障切换,以及提供备份等等.MySQL支持多种不同的复制技术,诸如单向,半同步异步复制等以及不同级别的复制,诸如数据库级别,表级,跨库同步等等.本文简要描述了一个基本的主从复制并给出示例. 1.复制的基本原理(步骤) a.在主库上把数据更改记录的二进制日志(binary log)     b.从库上的I/O线程连接到主库并请求发送其二进制日志文件(主库

  • Android开发之基本控件和四种布局方式详解

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局.而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式.先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio.开始今天的正题, 虽然A

  • Mysql Limit 分页查询优化详解

    select * from table LIMIT 5,10; #返回第6-15行数据 select * from table LIMIT 5; #返回前5行 select * from table LIMIT 0,5; #返回前5行 我们来写分页 物理分页 select * from table LIMIT (当前页-1)*每页显示条数,每页显示条数; MySQL之Limit简单优化.md 同样是取90000条后100条记录,传统方式还是改造方式? 传统方式是先取了前90001条记录,取其中最

  • Android 文件存储与SharedPreferences存储方式详解用法

    目录 持久化技术简介 文件存储 1. 将数据存储到文件中 2. 从文件中读取数据 SharedPreferences 存储 1. 将数据存储到 SharedPreferences 中 2. 从 SharedPreferences 中读取数据 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机的情况下,这些数据也不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备的数据是处于持久状态的.持久化技术提供了一种机制,可以让数据在瞬时状态和持久状

  • Python实现绘制多种激活函数曲线详解

    利用numpy.matplotlib.sympy绘制sigmoid.tanh.ReLU.leaky ReLU.softMax函数 起因:深度学习途中,老师留一作业,绘制激活函数及其导数,耗时挺久,记录学习过程 准备工作:下载numpy.matplotlib.sympy pip install numpy matplotlib sympy 查找对应库的文档: numpy文档 matplotlib文档 sympy文档 写代码的时候发现vscode不会格式化我的python?查了一下原来还要安装fla

随机推荐