常用SQL Server分页方式
假设有表ARTICLE,字段ID、YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2
第一种方案、最简单、普通的方法:
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
第二种方案:
SELECT *
FROM( SELECT TOP 30 *
FROM ( SELECT TOP 45030 *
FROM ARTICLE
ORDER BY YEAR DESC
,ID DESC ) f
ORDER BY f.YEAR ASC
,f.ID DESC ) s
ORDER BY s.YEAR DESC
,s.ID DESC
第三种方案:
SELECT *
FROM ARTICLE w1
,( SELECT TOP 30 ID
FROM ( SELECT TOP 50030 ID
,YEAR
FROM ARTICLE
ORDER BY YEAR DESC
,ID DESC ) w
ORDER BY w.YEAR ASC
,w.ID ASC ) w2
WHERE w1.ID = w2.ID
ORDER BY w1.YEAR DESC
,w1.ID DESC
第四种方案:
SELECT *
FROM ARTICLE w1
WHERE ID IN
( SELECT TOP 30 ID
FROM ( SELECT TOP 45030 ID
,YEAR
FROM ARTICLE
ORDER BY YEAR DESC
,ID DESC ) w
ORDER BY w.YEAR ASC
,w.ID ASC )
ORDER BY w1.YEAR DESC
,w1.ID DESC
第五种方案:
SELECT w2.n
,w1.*
FROM ( SELECT TOP 50030 Row_number() OVER (ORDER BY YEAR DESC, ID DESC) n
,ID
FROM ARTICLE ) w2
,ARTICLE w1
WHERE w1.ID = w2.ID
AND w2.n > 50000
ORDER BY w2.n ASC
在查询页数靠前时,效率3>4>5>2>1,页码靠后时5>4>3>1>2,再根据用户习惯,一般用户的检索只看最前面几页,因此选择3 4 5方案均可,若综合考虑方案5是最好的选择
常用SQL Server分页方式的更多相关文章
- 常用 SQL Server 规范集锦
常用 SQL Server 规范集锦 常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数 ...
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
SQL Server游标 转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...
- SQL server 数据库连接方式分析
SQL server 数据库连接方式图示: ODBC和OLEDB连接的区别 ODBC(开放数据库互连):是Microsoft引进的一种早期数据库接口技术.它实际上是ADO的前身.早期的数据库连接是非常 ...
- 二、SQL Server 分页
一.SQL Server 分页 --top not in方式 select top 条数 * from tablename where Id not in (select top 条数*页数 Id f ...
- SQL SERVER 分页方法
最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的 ...
- SQL Server Join方式
原文:SQL Server Join方式 0.参考文献 Microsoft SQL Server企业级平台管理实践 看懂SqlServer查询计划 1.测试数据准备 参考:Sql Server中的表访 ...
- SQL Server分页模板
SQL Server分页模板 WITH T AS ( SELECT ROW_NUMBER() OVER(ORDER BY AlbumId ) AS row_number, * FROM (SELECT ...
- SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条
SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...
- 解决hibernate对Sql Server分页慢的问题
一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...
随机推荐
- 根据list<Object>中的某个字段排序
compareTo必须是两个对象之间的比较(比如Long,Integer...),以下例子是升序排序 private void businessSort(List<WxDailyBusiness ...
- Java内存区域和GC机制篇
Java内存区域和GC机制一.目录 1.Java垃圾回收概括 2.Java内存区域 3.Java对象的访问方式 4.Java内存访问机制 5.Java GC 机制 6.Java垃圾收集器 二.Java ...
- java编程中的Java.Lang.Math类
1. Math.PI :表示的是圆周率常量: 2.Math.E :表示的是普通常量(e): 3.abs()方法: 表示取绝对值 eg1: int x = Math.abs(50L); ...
- JS闭包(一)
闭包是指有权访问另一个函数作用域中的变量的函数. 创建闭包的常见方法:在一个函数内部创建另一个函数. 对彻底理解闭包,需要知道如何创建作用域链以及作用域链有什么作用的细节. 闭包的功能: 保存函数执行 ...
- setTimeout的时间设为0的问题
javascript是单线程执行的,当某一段代码正在执行的时候,所有的后续任务都必须等待,形成一个队列, 一旦当前任务执行完毕,再从队列中取出下一个任务.这常被称为”阻塞式执行“. 如果代码中设定一个 ...
- python运维开发(二十五)---cmdb开发
内容目录: 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infr ...
- python安装第三方包的两种方式
最近研究QQ空间.微博的(爬虫)模拟登录,发现都涉及RSA算法.于是需要下一个RSA包(第三方包).折腾了很久,主要是感觉网上很多文章对具体要在哪里操作写得不清楚.这里做个总结,以免自己哪天又忘了. ...
- Network Saboteur(搜索)
Network Saboteur POJ2531 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10351 Accept ...
- StringBuilder是不是线程安全的?
测试条件: 开启2个并行执行任务,往同一个StringBuilder对象写入值 测试代码: ; static StringBuilder sbIsThreadSafe = new StringBuil ...
- Application.HookMainWindow完全替代了原来的窗口过程(但是好像也会继续传递)
unit HookMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialo ...