row_number() over order by与利用rownum查询分页效率分析

实际测试:

数据库:70万条数据

查询第10000页,每页10条。
row_number() 耗时: 2.2秒
rownum 耗时:1.3秒

查询第20000页,每页10条。
row_number() 耗时: 4.5秒+
rownum 耗时:3.8秒+

网上看到的说,row_number()效率最高看来是没有经过大数据测试的。

本来还寄希望于row_number()分页代码简洁些,效率高些能优化现在系统的!让人失望了!

个人分析:新的分页方法(row_number() over(order by t.xxx desc) RN 排序法没有3层嵌套排序效率高),因为over里面的order by需要较长时间(数据量上十万级别时),而又不能在子查询里面综合使用rownum来帮助缩减第一次出来的数据(因为rownum伪列是从取出数据的时候排列的)。

  

时间: 2024-09-30 10:36:53

row_number() over order by与利用rownum查询分页效率分析的相关文章

Row_Number()over(order by....) as

出自:http://www.2cto.com/database/201307/227103.html Sql Server Row_Number()学习 Row_Number(): row_number()主要是为选出的每一条记录按照一定的排序方式生成一个行序号. 语法: 1 ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) CREATE TABLE #Test(TypeNa

LINQ to SQL 模拟实现 ROW_NUMBER() OVER(ORDER BY ...) 的功能

?  前言 本来是想使用 LINQ 实现类似 SQL: ROW_NUMBER() OVER(ORDER BY -) 的功能,但是貌似 LINQ 不支持,反正没找到解决办法,无奈使用了LINQ Select() 方法实现. 1)   需求,需要实现一下 SQL: SELECT TOP 10 ROW_NUMBER() OVER(ORDER BY T.TotalAmount DESC) AS SN, * FROM ( SELECT T2.Name, SUM(T2.Amount) AS TotalAmo

利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程

1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器执行该存储过程,在显示栏中如果有影响的行数,则影响几行count就是几(2)如果通过查询分析器执行该存储过程,在显示栏中如果显示'命令已成功完成.'则count = -1;在显示栏中如果有查询结果,则count = -1总结:A.ExecuteNonQuery()该方法只返回影响的行数,如果没有影响

jdbc增删改查,利用反射查询

整理自http://blog.csdn.net/yanzi1225627/article/details/26950615,谢谢作者! 本文我的爱点是: 1.利用反射实现数据库数据查询 2.编写一个sql语句,其中的参数用?来代替,然后将参数写到List里 例如使用例子: 1 String sql = "delete from userinfo where username = ?"; 2 List<Object> params = new ArrayList<Obj

sql 分页row_number() over(order by key)

? 1 2 3 4 select * from (                 select  row_number() over(order by BD008_001) as row ,* from                                                                             (select * from bd008)t               ) tt where tt.row between 1 and 30

meta标签、利用媒体查询 link不同的CSS文件

利用媒体查询 link不同的CSS文件:<link rel="stylesheet" media="screen and (min-width:1px) and (max-width:500px)" href="/css/d1.css" /><link rel="stylesheet" media="screen and (min-width:500px)" href="/css

Oracle基本语法&amp;&amp;函数&amp;&amp;子查询&amp;&amp;分页查询&amp;&amp;排序&amp;&amp;集合操作&amp;&amp;高级分组函数

一.  数据库 手工---文件管理---数据库 DB:Database 数据库. DBMS:管理数据库的软件.(oracle) 主流关系数据库: 1.      Oracle 2.      DB2 3.      SQL Server 基本没人使 4.      MySQL  基本没人用,免费 Linux 开源,可以发现漏洞补上 Windows服务器会有补丁,数据易泄漏 eclipse 日食 数据表(Table): 表的行(Row):记录 表的列(Column):字段 二.  关系型数据库 一

MySql、SqlServer、Oracle 三种数据库查询分页方式

SQL Server关于分页 SQL 的资料许多,有的使用存储过程,有的使用游标.本人不喜欢使用游标,我觉得它耗资.效率低:使用存储过程是个不错的选择,因为存储过程是颠末预编译的,执行效率高,也更灵活.先看看单条 SQL 语句的分页 SQL 吧.方法1:适用于 SQL Server 2000/2005SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) O

Sql 分页查询效率分析

选取了2中效率比较高的方式比较效率:row_Number() .offset fetch 表test中有1000条数据,2个字段:field1(int),field2(nvarchar) --1000条数据,查询500次第1-10行,39s --1000条数据,查询500次第500-550行,87s --1000条数据,查询500次第150-160行,88s DECLARE @uId int SET @uId=1 BEGIN while @uId<=500 BEGIN SELECT * FROM