SQLServer2005/2008新的高效分页方法-row_number()over函数的使用
部分转自:http://www.cnblogs.com/xinyuxin912/archive/2009/03/10/1407495.html
Select * FROM (
select ROW_NUMBER()Over(order by cf_id desc) as rowId,* from T_Test
) as mytable
where rowId between 21 and 40
每页20条,第2页
以下是利用本方法和传统利用Set RowCount方法存储过程的效率比较结果:
未建索引情况下:
500w数据: 存储过程1分20秒 , 新方法1分18秒
400w数据:存储过程47秒,新方法41秒
300w数据:存储过程35秒,新方法30秒
200w数据:存储过程25秒,新方法20秒
100W数据:存储过程12秒,新方法10秒
50W数据:存储过程 7秒,新方法 0秒
row_number()over函数的使用
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码. row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序). rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内). dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 . lag(arg1,arg2,arg3): 看几个SQL语句: 语句一: select row_number() over(order by sale/cnt desc) as sort, sale/cnt 执行结果: SORT SALE/CNT 语句二:查询员工的工资,按部门排序 select ename,sal,row_number() over (partition by deptno order by sal desc) as sal_order from scott.emp; 执行结果: ENAME SAL SAL_ORDER 已选择14行。 语句三:查询每个部门的最高工资 select deptno,ename,sal from 执行结果: DEPTNO ENAME SAL 已选择3行。 语句四: select deptno,sal,rank() over (partition by deptno order by sal) as rank_order from scott.emp order by deptno; 执行结果: DEPTNO SAL RANK_ORDER 已选择14行。 语句五: select deptno,sal,dense_rank() over(partition by deptno order by sal) as dense_rank_order from scott.emp order by deptn; 执行结果: DEPTNO SAL DENSE_RANK_ORDER 已选择14行。 语句六: select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) as lag_ from scott.emp order by deptno; 执行结果: DEPTNO ENAME SAL LAG_ 已选择14行。 |
转载于:https://www.cnblogs.com/elock/archive/2009/12/05/1617724.html
SQLServer2005/2008新的高效分页方法-row_number()over函数的使用相关推荐
- mysql 高效分页查询_PostgreSQL、MySQL高效分页方法探讨
对于数据库相关的业务,逃不过的数据分页场景,无论是前台分页浏览还是划到页面底部自动加载.对于分页需求,各数据库也提供了成熟的SQL支持,类似于Hibernate等ORM框架也集成了相关的方法.但是基于 ...
- 【前端学习之路】ES6新特性 Promise基本方法 、async函数(阮一峰老师、小马哥_老师 课程笔记)
1.Promise.then()方法 Promise 实例具有 then 方法,其第一个参数是 resolve 状态的回调函数,第二个参数是 reject 状态的回调函数,它们是可选的. then 方 ...
- SQL2005结合ROW_NUMBER()高效分页存储过程
SQL2005结合ROW_NUMBER()高效分页存储过程: CREATE PROCEDURE [dbo].[sp_Accounts_GetUserListPaged] @PageIndex ...
- (转)几种常用存储过程分页方法
我们先给出几种主要的分页方法和核心语句,然后直接给出结论,有兴趣的读者可以看看后面的数据 几种常用存储过程分页方法 TopN方法 select Top(@PageSize) from TableNam ...
- Sql Server 2012 分页方法分析(offset and fetch)
最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的.其中 offse ...
- ASP.NET分页方法的了解程度
ASP.NET分页方法的了解程度 [出现频率] ★★★★☆ [解答] ASP.NET分页的常用方法有以下几种. q 启用部分数据控件的内置分页功能,如设置GridView控件的"AllowP ...
- asp.net分页方法
ASP.NET分页的是我们在编程过程中遇到的常见问题,下面就这个问题说下添美的看法. q 启用部分数据控件的内置分页功能,如设置GridView控件的"AllowPaging"属性 ...
- 一. SQL Server 2008 新特性概述
前几天一直再学习ASP.NET MVC框架.这几天在研究EMC存储和F5交换机都是奢侈品啊,虽然在工作中大多是ORCLE,看到SQL SERVER 2K8有许多新特性决定学习学习,增加自己的市场竞争力 ...
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
关键字:DataGrid.存储过程.分页 出自: http://blog.csdn.net/yzx110/archive/2004/08/18/78525.aspx 摘要:在最进的一个项目中因为一个管 ...
- 新版数据库分页方法(Sql server2012)
1. ROW_NUMBER() 的分页方法 dbcc freeproccache dbcc dropcleanbuffers set statistics time on set statistics ...
最新文章
- Python开发环境配置
- spring mvc-REST
- 一个好的APP需要后台产品经理么?
- 【Java代码】实现字符串转数据库的 inStr【使用 JDK8 stream.collect(Collectors.joining(delimiter, prefix, suffix)) 实现】
- 一击进榜!达摩院十年“扫地僧”,揭秘阿里云数据仓库逆袭之旅
- 实验8.2 指针与字符串 7-2 字符串排序
- C# 多个线程一直跑着While(true)
- 用Aspose.Words 从Word文档中提取表格数据
- javascript对数组的操作
- 2020阿里云线上峰会预告
- unity如何实现图片透视_如何用java实现图片与base64转换
- java私塾架构二,小弟我在Java私塾学习期间的学习源码
- H5 canvas游戏开发教程集合
- WiFi的信道与关联
- 除了AI,你不该忽视Python在这4大领域的应用!
- 爬虫 + 自动化利器 selenium 之自学成才篇(二)
- 高德地图实现展示多个规划的路线
- 5 个必备有用的开源日志分析工具
- iphone11官网HTML,苹果小白入手iPhone11,以下几个基础操作要知道
- 2022.2.28 心情日记
热门文章
- openstack创建的实例不能使用ssh登录
- bootstrap table导出功能无效报错Uncaught INVALID_CHARACTER_ERR: DOM Exception 5和导出中文乱码问题...
- javascript边角知识
- 防火墙配置文件iptables详解
- 9.MongoDB之explain(执行计划分析)
- 网络性能测试工具iperf的安装与使用
- 简易web服务器系统毕业论文设计,毕业论文 简易的WEB服务器的设计
- C#中@字符的三个作用
- QBC检索和本地SQL检索
- Nginx源码分析 - HTTP模块篇 - TCP连接建立过程(21)