假如tb_customer表中的数据量非常大,在显示时要分页显示而且每页只显示10条信息。为了效果我们取第三页的数据。

      

方法一:遍历两次表,取不同的数据。

select top 10 * from tb_customer(nolock)
where c_no not in(select top 20 c_no from tb_customer)
order by c_no

      

方法解析:方先取出前20条的c_no(前两页),排除前20条数据的c_no,然后在剩下的数据里面取出前10条数据。

缺点:遍历表中所有数据两次,数据量大时性能不好。

方法二:获取前两页的最大值,然后获取大于最大值的值。

select top 10 * from tb_customer(nolock)
where c_no >(select max(t.c_no) from (select top 20 c_no from tb_customer order by c_no) t)
order by c_no

      

方法解析:先取出前20条数据的c_no,然后取出c_no里的最大值,再从数据里面取出大于前20条c_no的最大值 的前10条数据。

缺点:性能比较差,和方法一大同小异。

方法三:计算序列值,然后根据虚列值获取数据。

select * from
(select *,row_number() over (order by c_no) c_no_id from tb_customer) t
where t. c_no_id between (10*(3-1)+1) and 10*3

      

方法解析:使用 ROW_NUMBER() 函数,这个方法性能比前两种方法要好,只会遍历一次所有的数据。适用于Sql Server 2000之后的版本(不含)。

方法四:使用OFFSET/FETCH NEXT分页。

select * from tb_customer(nolock)
order by c_no
offset 10*2 rows fetch next 10 rows only

      

方法解析:适用于Sql Server 2008之后的版本(不含)。

offset 20 rows fetch next 10 rows only 这句代码我的理解是:跳过前面20条数据(前2页)从下一条开始取10条数据。

个人感觉这个方法比使用 ROW_NUMBER() 函数的方法要好(从代码方面来看,代码也少很多),性能方面待测试。

不过,看语句编写的复杂程度,最后两种方法比较简单,性能肯定是远超前面两种方法的,具体的还得看实际使用情况。

SQL分页查询的更多相关文章

  1. SQL Server SQL分页查询

    SQL Server SQL分页查询的几种方式 目录 0.    序言 1.    TOP…NOT IN… 2.    ROW_NUMBER() 3.    OFFSET…FETCH 4.    执行 ...

  2. SQL分页查询结果不一致

    今天遇到了SQL分页查询结果不一致的情况,一看代码,原来是没加排序查询!!分页查询最好加排序,且以唯一性高的字段进行排序,如ID,时间等,以保持每页查询结果的准确! PS:又帮别人擦屁股!!

  3. Oracle中的SQL分页查询原理和方法详解

    Oracle中的SQL分页查询原理和方法详解 分析得不错! http://blog.csdn.net/anxpp/article/details/51534006

  4. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  5. sql分页查询(2005以后的数据库)和access分页查询

    sql分页查询: select * from ( select ROW_NUMBER() over(order by 排序条件) as rowNumber,* from [表名] where 条件 ) ...

  6. 【原创】SQL分页查询存储过程

    ------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...

  7. SQL分页查询,纯Top方式和row_number()解析函数的使用及区别

    听同事分享几种数据库的分页查询,自己感觉,还是需要整理一下MS SqlSever的分页查询的. Sql Sever 2005之前版本: select top 页大小 * from 表名 where i ...

  8. SQL分页查询总结{转}

    开发过程中经常遇到分页的需求,今天在此总结一下吧.简单说来方法有两种,一种在源上控制,一种在端上控制.源上控制把分页逻辑放在SQL层:端上控制一次性获取所有数据,把分页逻辑放在UI上(如GridVie ...

  9. ABAP Open SQL 分页查询

    分页查询是一个常见需求,特别是在web相关的开发当中. 让人意外的是,google搜索abap paging query,查到的结果似乎都指出需要使用native SQL来实现相关功能:使用百度搜索 ...

  10. sql分页查询公式

    分页查询公式: select top PageRow(每页显示的数据行数) from 表名 where 主键  not in(select top PageRow*(当前页数-1) 主键  from ...

随机推荐

  1. [转]使用scrapy进行大规模抓取

    原文:http://www.yakergong.net/blog/archives/500 使用scrapy有大概半年了,算是有些经验吧,在这里跟大家讨论一下使用scrapy作为爬虫进行大规模抓取可能 ...

  2. liunx中字符驱动编写的简单模板

    下面是关于字符驱动两个程序,主要是说明驱动编写的思想,理解驱动是怎么一步一步被实现的. 驱动的第一个实现程序,是相对于裸机编程的,主要是体会一下驱动编程思想: cdev.h: 所包含的头文件 #ifn ...

  3. [驱动开发] windbg符号表

    新建"环境变量 - 系统":_NT_SYMBOL_PATH 值为:SRV*FullDirPath*http://msdl.microsoft.com/download/symbol ...

  4. gridView RowDataBound事件 鼠标经过行颜色变化及根据字段值显示指定内容

    protected void gvBarInfo_RowDataBound(object sender, GridViewRowEventArgs e)        {            if ...

  5. 汇编中bss,data,text,rodata,heap,stack,意义

    bss段: BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文BlockStarted by Symbol的简称.BSS段属于静态内存分配. data ...

  6. Kerberos简介及常见问题

    基本描述 Kerberos使用Needha-Schroeder协议作为它的基础.它使用了一个由两个独立的逻辑部分:认证服务器和票据授权服务器组成的"可信赖的第三方",术语称为密钥分 ...

  7. nginx 基本操作

    nginx 是什么 nginx 是轻量.高性能的网页服务器,相较 Apache 占有内存小. 下载 https://nginx.org/en/download.html 默认根目录 安装目录下的 ht ...

  8. JS中this的值到底为何?

    之前很久的时间,因为研究不深,对于this的值一直模模糊糊,不是很清楚,最近有空做了一些研究,终于彻底弄明白了this到底为何物. 首先, 先抛出一个定论:”在Javascript中,this关键字永 ...

  9. js点击空白处弹窗消失

    $(document).mousedown(function(e){ var _list = $('#pop'); if(!_list.is(e.target) && _list.ha ...

  10. MySQL, 创建一个只读用户和一个所有权限用户

    安装pasa需要配置mysql.基本知识学习一下 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html MySQL 为关系型数据库 ...