mysql的分页是基于limit关键字,oracle的分页是基于rownum行号,SQLserver的分页在下面进行研究,是基于SQLServer2012进行的测试. 0.原来的SQL的所有数据 下面的测试假设每页都是取5条数据. 1.第一种-ROW_NUMBER() OVER()方式(over函数必须有) (1)取第一页数据 select * from ( select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].
Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: 代码如下: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TO
--2012的OFFSET分页方式 select number from spt_values where type='p' order by number offset 10 rows fetch next 5 rows only; go --2005的ROW_NUMBER分页方式 select number from ( select number,row_number() over(order by number) as num from spt_values where type='p'
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerProfiler把语句抓取了上来. 用ROW_NUMBER()进行分页 我们看看现场抓上来的分页语句: select top 20 a.*,ag.Name as AgentServerName,,d.Name as MgrObjTypeName,l.UserName as userName from
以 项目表 PM_Project 为例. PM_Project 全部内容如下(共6条数据): 一.Top – Not In - Top 方式分页 直接的,原始的,不采用函数,纯手动挡. 分步探索过程: 采用的最直接做法就是使用两个Top来实现. , BEGIN SELECT TOP (@pageSize) * FROM ( SELECT TOP (@pageSize * @pageIndex) * FROM PM_Project ORDER BY Id DESC --- 内查询倒序 ) AS
方式1: 假设页数是10,现在要拿出第5页的内容,查询语句如下: --10代表分页的大小 * from test where id not in ( --40是这么计算出来的:10*(5-1) id from test order by id ) order by id 原理:需要拿出数据库的第5页,就是40-50条记录.首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素 方式2: 还是以上面的结果为例,采用另外的一种方法 --数据的意思和上面提及的一样 * from te
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerProfiler把语句抓取了上来. 用ROW_NUMBER()进行分页 我们看看现场抓上来的分页语句: select top 20 a.*,ag.Name as AgentServerName,,d.Name as MgrObjTypeName,l.UserName as userName fro
row_number() ,还是top 这些分页的方法比较老了,效率不是很高效的, Sqlserve2012就有了,效率对比比较明显,尤其是数据比较大的情况下(我们可以观看查询执行计划) Offset 0 Rows Fetch Next 20 Rows only(需要先排序) 这里只举一个接单的sql,只起到抛砖引玉的作用: select id,name from Student order by id desc Offset 0 Rows Fetch Next 20 Rows only
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 前言 之前的大多数人分页采用的都是这样: SELECT * FROM table LIMIT 20 OFFSET 50 可能有的小伙伴还是不太清楚LIMIT和OFFSET的具体含义和用法,我介绍一下: LIMIT X 表示: 读取 X 条数据 LIMIT X, Y 表示: 跳过 X 条数据,读取 Y 条数据 LIMIT Y OFFSET X 表示:
USE [AAA_TYDC] GO /****** Object: StoredProcedure [dbo].[proc_DataPagination] Script Date: 11/20/2014 11:04:47 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /********************************************************* * 作 用:数据分页 * 作 者:evafly