高性能SQLServer分页语句
第一种方法:效率最高
SELECT TOP 页大小 * FROM( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 )as A WHERE RowNumber > 页大小*(页数-1) --注解:首先利用Row_number()为table1表的每一行添加一个行号,给行号这一列取名'RowNumber' 在over()方法中将'RowNumber'做了升序排列 --然后将'RowNumber'列 与table1表的所有列 形成一个表A --重点在where条件。假如当前页(currentPage)是第2页,每页显示10个数据(pageSzie)。那么第一页的数据就是第11-20条 --所以为了显示第二页的数据,即显示第11-20条数据,那么就让RowNumber大于 10*(2-1)
存储过程 (表名aa)
if(exists(select* from sys.procedures where name='p_location_paging'))--如果p_location_paging这个存储过程存在 drop proc p_location_paging --那么就删除这个存储过程 go create proc p_location_paging(@pageSize int, @currentPage int)--创建存储过程,定义两个变量'每页显示的条数'和'当前页' as select top (@pageSize) * from ( select ROW_NUMBER() over(order by locid) as rowid ,* from aa )as A where rowid> (@pageSize)*((@currentPage)-1)
第二种方法:效率次之
SELECT TOP 页大小 * --如果每页显示10条数据,那么这里就是查询10条数据 FROM table1 WHERE id > --假如当前页为第三页,那么就需要查询21-30条数据,即:id>20 ( SELECT ISNULL(MAX(id),0) --查询子查询中最大的id FROM ( SELECT TOP 页大小*(当前页-1) id FROM table1 ORDER BY id
--因为当前页是第三页,每页显示十条数据。那么我将: 页大小*(当前页-1),就是获取到了在"当前页""前面"的20条数据。所以上面用max(id)查询最大的id,取到这个20,那么前面的where 条件的id>20 即取到了第三页的数据,即取21-30条数据 ) as A ) ORDER BY id
存储过程(表名 aa)
if(exists(select * from sys.procedures where name='p_location_paging')) drop proc p_location_paging go create proc p_location_paging(@pageSize int ,@currentPage int) as select top (@pageSize) * from aa where locId>(select ISNULL(MAX(locId),0) from (select top ((@pageSize)*(@currentPage-1))locid from location order by locId) as a )order by locId
第三种方法:效果最差
SELECT TOP 页大小 * FROM table1 WHERE id NOT IN --where条件语句限定要查询的数据不是子查询里面包含的数据。即查询"子查询"后面的10条数据。即当前页的数据 ( --如果当前页是第二页,每页显示10条数据,那么这里就是获取当前页前面的所有数据。 SELECT TOP 页大小*(当前页-1) id FROM table1 ORDER BY id ) ORDER BY id
高性能SQLServer分页语句的更多相关文章
- Sqlserver2008和Oracle分页语句
SqlServer 分页语句 select StuID ,StuNo,StuName,Age,Sex, ClassName ClassName from (select *, row_number() ...
- sqlserver分页;mysql分页;orcale分页 的sql 查询语句
一,sqlserver分页: )) ID FROM 表名 AS 表名1_1 ORDER BY ID)) ORDER BY ID; 二:mysql分页 )*每页显示的数据条数,当前页码 * 每页显示的数 ...
- SQLServer分页查询存储过程
项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1, ...
- SQLServer2012 分页语句执行分析
上一篇文章提到了,SQLServer2012在使用Offset,Fetch语句分页时,获取了大量不需要的数据,导致查询效率低的问题. 现在让我们来看看,究竟是什么导致SQLServer不能按需取数呢? ...
- SqlServer常用语句
首先,写这个的原因是我其实sql语句不太行,总觉得自己写得很乱,好像也没有系统学习过,借此复习和与大家探讨 No.1 关于查询时间区间是否重叠的sql语句 问题是这样:插入之前,想查询同User是否其 ...
- [搜片神器]服务器SQL2005查询分页语句你理解了么
在sosobt.com网站准备采用Lucence.net来进行索引处理搜索慢问题的时候,突然发现常用的分页获取数据的row_number也支持不住了,后期查到200多万的时候非常慢(总数据有500万) ...
- Mysql 分页语句Limit用法
转载自:http://qimo601.iteye.com/blog/1634748 1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用 ...
- SQL分页语句总结
今天对分页语句做一个简单的总结,他们大同小异的,只要理解其中一个其他的就很好理解了. 使用top选项 selecttop10*from Orders a where a.orderid notin(s ...
- SQLSERVER PRINT语句的换行
原文:SQLSERVER PRINT语句的换行 SQLSERVER PRINT语句的换行 想在输出的PRINT语句里面换行,可以这样做 /* SQL的换行 制表符 CHAR(9) 换行符 CHAR( ...
随机推荐
- VBA 刷新数据透视表
Sub pjCount() Dim r As Long r = Sheets("Inquery").[A65536].End(xlUp).Row ActiveSheet.Pivot ...
- java 注解方式 写入数据到Excel文件中
之前有写过一点关于java实现写Excel文件的方法,但是现在看来,那种方式用起来不是太舒服,还很麻烦.所以最近又参考其他,就写了一个新版,用起来不要太爽. 代码不需要解释,惯例直接贴下来: publ ...
- Jmeter: PATCH方法无法发送参数的暂时解决方法
Jmeter: PATCH方法无法发送参数的暂时解决方法 最近在做API测试,前面的GET这些HTTP Request方法都无压力,顺利解决. 但碰到PATCH方法时,发现无法通过. 通过对比,发现P ...
- c语言实行泛型hashmap
代码出处:A simple string hashmap in C https://github.com/petewarden/c_hashmap main.c (main2是官方源代码,main是 ...
- SpringBoot: 2.SpringBoot整合servlet(转)
整合方式1:通过注解扫描完成 Servlet 组件的注册 1.编写servlet package com.bjsxt.servlet; import javax.servlet.ServletExce ...
- hadoop第一个程序WordCount
hadoop第一个程序WordCount package test; import org.apache.hadoop.mapreduce.Job; import java.io.IOExceptio ...
- C++学习笔记-异常处理
程序设计的要求之一就是程序的健壮性.希望程序在运行时能够不出或者少出问题.但是,在程序的实际运行时,总会有一些因素会导致程序不能正常运行.异常处理(Exception Handling)就是要提出或者 ...
- P2709 小B的询问 【普通莫队】
这是我的莫队入门题,我也了解到了莫队分为普通莫队以及带修莫队.顾名思义,普通莫队不需要修改区间的值,而带修莫队处理区间的值会修改的查询. 能用莫队的前提条件: 1.在知道 [l, r]中信息时,可以在 ...
- Windows主机SAM文件格式破解解密
文件格式如是下图这种格式: 那么就可以通过通过kali终端samdump2 + system + sam 生成出来通过hashcat -m 1000去跑,或者通过md5查询
- [Comet OJ - Contest #6 D][48D 2280]另一道树题_并查集
另一道树题 题目大意: 数据范围: 题解: 这个题第一眼能发现的是,我们的答案分成两种情况. 第一种是在非根节点汇合,第二种是在根节点汇合. 尝试枚举在第几回合结束,假设在第$i$回合结束的方案数为$ ...