Row_Number实现分页】的更多相关文章

相比在SQL Server 2000 中使用的分页方式,在SQL Server 2005中使用新的语法ROW_NUMBER()来分页效率要高出很多,但是很多人在使用ROW_NUMBER()这种分页方式时,使用的方法并不正确,以下列出不正确的和正确的做法并做简单分析: 首先假设我们已经创建了如下的表和索引并初始化了100万条数据: CREATE TABLE [dbo].[Users] ( ,) NOT NULL, ) NULL, ) NULL, CONSTRAINT [PK_Users] PRIM…
1.首先讲下row_number() over() 是干什么的? 是一个分析函数,会在数据表生成一个排序列. 案例SQL: select ROW_NUMBER() over(order by bookId) as Idd, * from BookInfo select * from BookInfo 如下图实例: 2.使用row_number() over()分页查询数据 本人觉得这种分页方法简便,一直也在用这个方法(使用row_number() over()产生的排序列也能清晰看到取的数据),…
原文:在论坛中出现的比较难的sql问题:5(row_number函数 分页.随机返回数据) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 1.在inner join后,如何分页. http://bbs.csdn.net/topics/390617884 sqlserver 对一张表进行分页查询,但是还要通过第二张表获取信息: --比如有一张表 create table Student ( sid int primary key identity(1,1) , sn…
Row_Number实现分页   1:首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号的集合 2:再查询该集合的 第 1  到第 5条数据 select * from     (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) as temp    where rowNumber betw…
1:首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号的集合 2:再查询该集合的 第 1  到第 5条数据 select * from     (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) as temp    where rowNumber between 1 and 5 完整的Sq…
背景 系统中使用了jqgrid的展示,现在要处理10w+的数据量 现状 使用了全查询的,查询到了10w+的数据放到了datatable中,每次页面刷新需要9秒多,并且传递给另一个dll来处理一些事情.偶尔会出现StackOverFlow的异常问题,但是频率较大. 分析 现有的就有两个问题需要解决: 性能问题 StackOverFlow的异常问题 起始 性能问题经过调查,sql语句查询完成之后至少4秒钟左右,因为是全查询,所以把尽力的条件都做了,效果不明显. 然后考虑用sql server的row…
1:首先是 select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1 生成带序号的集合 2:再查询该集合的 第 1  到第 5条数据 select * from     (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) as temp    where rowNumber between 1 and 5 完整的Sq…
--提取分页数据,返回总记录数 Create procedure [dbo].[sp_Common_GetDataPaging_ReturnDataCount] ( @SqlString varchar(max), --查询语句 @PageNumber int, --当前的页码 @PageSize int, --每页显示的数据量 @SequenceField varchar(100), --排序字段 @DataCount int out --总数据量 ) as begin DECLARE @Sq…
代码示例: WITH domain AS(SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) ids,* FROM dbo.DomainInfo) SELECT * FROM domain WHERE ids BETWEEN AND ORDER BY CityID DESC…
SELECT ContractName ,ContractNO, State,CreateDate FROM (SELECT ContractName ,ContractNO,CreateDate, State,ROW_NUMBER() OVER (ORDER BY CreateDate DESC) AS RowNumber FROM dbo.MALL_Contract) T1WHERE RowNumber BETWEEN 10 AND 20…
1. 在数据表基础上面添加一个自增的一列记录行数(虚拟的实际数据库不存在,不会影响数据库结构)的列当然也顺便起一个别名(我这里起了一个rowNum) 2.由于rowNum是一个虚拟的.若直接使用会报'rowNum'无效,我们就要把这个带有虚拟的列的表看作一个整体也起一个别名 3.下面就简单多了.直接条件限定就可以了 注:其他列名都可以引用的 select * from (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * fro…
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerProfiler把语句抓取了上来. 用ROW_NUMBER()进行分页 我们看看现场抓上来的分页语句: select top 20 a.*,ag.Name as AgentServerName,,d.Name as MgrObjTypeName,l.UserName as userName from…
记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题   最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerProfiler把语句抓取了上来. 用ROW_NUMBER()进行分页 我们看看现场抓上来的分页语句: select top 20 a.*,ag.Name as AgentServerName,,d.Name as…
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerProfiler把语句抓取了上来. 用ROW_NUMBER()进行分页 我们看看现场抓上来的分页语句: select top 20 a.*,ag.Name as AgentServerName,,d.Name as MgrObjTypeName,l.UserName as userName from…
  最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerProfiler把语句抓取了上来. 用ROW_NUMBER()进行分页 我们看看现场抓上来的分页语句: select top 20 a.*,ag.Name as AgentServerName,,d.Name as MgrObjTypeName,l.UserName as userName fro…
之前通过row_number()实现分页查询时: select top [PageSize] * from ( select row_number() over (order by id desc) as RowNum,* from table ) as A where RowNum > (PageIndex - ) * PageSize 发现查询出来的结果顺序是不确定的,查询官方文档(地址:https://docs.microsoft.com/en-us/sql/t-sql/functions…
使用ROW_NUMBER来分页几乎是家喻户晓的东东了,而且这东西简单易用,简直就是程序员居家必备之杀器,然而ROW_NUMBER也不是一招吃遍天下鲜的无敌BUG般存在,最近就遇到几个小问题,拿出来供大家娱乐下. ---====================================================== 问题1:为什么加WHERE条件就慢,不加反而快? 查询SQL: WITH Temp AS( SELECT * , ROW_NUMBER()OVER(ORDER BY T2.…
最近有点忙,本来有好多东西可以总结,Redis系列其实还应该有四.五.六...不过<Redis in Action>还没读完,等读完再来总结,不然太水,对不起读者. 自从上次Redis之后呢,算是对Nosql类型的产品有些入门了,这会换个方向,研究下真正的NoSql数据库——MongoDB.说起MongoDB,确实是用完了之后颠覆了我的数据管和程序观.怎么说呢?如果用在OO设计的程序里那真的太棒了,像我这种数据驱动.表驱动思想根深蒂固的人,思路很难一下子跟上MongoDB的节奏.当然并不是调用…
数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多方法了.之前在面试中遇到过这一问题,问如何高效实现数据库分页.刚好上周在业务中也遇到了这个需求,所以在这里简单记录和分享一下. 一 需求 这里以SQLServer的示例数据库NorthWind为例,里面有一张Product表,现在假设我们的需求是要以UnitPrice降序排列,并且分页,每一页10条…
1 利用临时表分页 分页存储过程: CREATE PROCEDURE [USP_Product_GetPaged] ), ), @PageIndex INT, @PageSize INT AS BEGIN DECLARE @PageLowerBound INT, @PageUpperBound INT SET @PageLowerBound = @PageSize * @PageIndex SET @PageUpperBound = @PageLowerBound + @PageSize CRE…
使用数据库分页返回用户数据有如下好处:1.减少服务器磁盘系统地读取压力2.减少网络流量,减轻网络压力3.减轻客户端显示数据的压力4.提高处理效率. 一般而言分页处理分为两种:应用程序中的分页(查询出所有数据)处理和数据库中的分页处理.目前大多数的应用都是在应用程序中借助支持数据分页处理的数据库访问组件(如DataGrid控件)实现分页处理(大部分的分页插件中也是采用的程序分页).实际上,在数据库中实现分页处理,可以从源头减少数据处理量,效果往往可能更好. 所以我们在需要分页的时候尽量使用数据库分…
大数据量,比如10万以上的数据,数据库在5G以上,单表5G以上等.大数据分页时需要考虑的问题更多. 比如信息表,单表数据100W以上. 分页如果在1秒以上,在页面上的体验将是很糟糕的. 优化思路: 1.主键索引,如ID自增列,主键 2.借助sqlserver的ROW_NUMBER()实现分页,分页时只需得到ID即可,如: WITH NoPagedTable AS ( SELECT ROW_NUMBER() OVER (order by ctime desc) AS rowIndex, ID FR…
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:其实的索引 * pageSize:每页显示的记录数 */ select o.* from (sql) o limit firstIndex,pageSize…
在sql sever中大数据的分页一直是难以处理的一块,利用id自增列分页也存在不足之处.从一个相对全面的分页看,sql sever2005中新增的row_number()函数解决了这个问题.还是从一个实际项目开始介绍吧.中国铁建股份公司的项目表中数据很大,开发之初用的是GridView控件自带的分页,在运行一年以后,点击下一页终于是难以等待了,系统需要优化.对于分页的改进是业务的需要.于是,我采用了Row_number()函数分页.也算一解了燃眉之急. 说明:该篇文章只是一个案例的说明,更详细…
原文:http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-side-paging-demo-using-offsetfetch-next.aspx?utm_source=brnewsletter&utm_medium=email&utm_campaign=2012Apr SQL Server 2005 引入了 ROW_NUMBER()来提供一种容易的分页方…
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:其实的索引 * pageSize:每页显示的记录数 */ select o.* from (sql) o limit firstIndex,pageSize…
最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的 其中 offset and fetch 最重要的新特性是 用来 分页,既然要分析 分页,就肯定要和之前的分页方式来比较了,特别是 Row_Number() 了,在比较过程中,发现了蛮多,不过最重要的,通过比较本质,得出了优劣,也和大家一起分享下. 准备工作,建立测试表:Article_Detail,主要是用来存放一些…
传统的SQL分页 传统的sql分页,所有的方案几乎是绕不开row_number的,对于需要各种排序,复杂查询的场景,row_number就是杀手锏.另外,针对现在的web很流行的poll/push加载分页的方式,一般会利用时间戳来实现分页. 这两种分页可以说前者是通用的,连Linq生成的分页都是row_number,可想而知它多通用.后者是无论是性能和复杂程度都是最好的,因为只要简单的一个时间戳即可. MongoDB分页 进入到Mongo的思路,分页其实并不难,那难得是什么?其实倒也没啥,看明白…
建立表 CREATE TABLE [TestTable] ( , ) NOT NULL , ) COLLATE Chinese_PRC_CI_AS NULL , ) COLLATE Chinese_PRC_CI_AS NULL , ) COLLATE Chinese_PRC_CI_AS NULL , ) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO 插入数据:(2万条,用更多的数据测试会明显一些) SET IDENTITY_INSERT Tes…
最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的文章.看过之后,感觉自己之前写的语句,太低端,太不科学了.  文章中讲了两种分页方法,其中一种只适用于SQL SERVER2012以上版本. ROW_NUMBER()函数分页 先介绍一下ROW_NUMBER()函数,这个函数的主要作用,从它的命名中就可看出来.ROW,每列,NUMBER数字,它的作用…