求教分页效率问题

问题描述

我想查一个大表的数据,大概有10M条数据,取其中的25条。测试发现两种方法时间差别很大,想求问大神原因。第一种SELECT * FROM (SELECT t.*,row_number() OVER (ORDER BY t.id DESC) AS rn FROM td_test t) WHERE rn BETWEEN 9999975 AND 10000000大概用时5分钟。第二种SELECT * FROM (SELECT t.* FROM td_test t ORDER BY t.id DESC) WHERE rownum BETWEEN 9999975 AND 10000000大概耗时1分30秒为什么差别如此之大?求原因! 问题补充:kidding87 写道

解决方案

over()根据上一次的结果来累加比如row_number(col)over(order by col)这句话就是按照排序结果从起始到当前行对col的行号一个累加而oracle本身会把查询出来的结果view里面就已经包含了rownum这个列所以先排序在拿结果集中的rownum是没有问题的你直接把要排序tab换为(select * from xxxx order xxxxx)就可以了
解决方案二:
row_number() OVER (ORDER BY t.id DESC)这句话有个累加的过程,在这里浪费了很多时间而oracle本身就是由rownum属性的我再推荐一种分页吧,这个效率更高些select * from (select *,rownum as rn from tab where rownum<COUNT_END)a where a.rn>=COUNT_START

时间: 2024-12-20 16:19:13

求教分页效率问题的相关文章

MySQL提数据高分页效率

我的这段代码是大数据量时提高分页的效率的测试代码--提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging"use TestForPaginggo--创建表SomeDatacreate table SomeData(id int primary key,name varchar(30) null,description text)go--插入数据insert into SomeData values(1,'num1','第1条')goinsert

如何提高MySQL数据分页效率

  本节的数据编辑插教程给我们简单介绍如何提高MySQL数据分页效率,下面我们将会给出的这段代码是大数据量时提高分页的效率的测试代码. 如果你也需要设置MySQL数据提高分页效率,那么,就一起来看看代码段吧! --提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging" use TestForPaging go --创建表SomeData create table SomeData ( id int primary key, name varcha

MySQL大数据量时提高分页效率

我的这段代码是大数据量时提高分页的效率的测试代码 --提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging" use TestForPaging go --创建表SomeData create table SomeData ( id int primary key, name varchar(30) null, description text ) go --插入数据 insert into SomeData values(1,'num1','第

ibatis中,用什么方式查询分页效率高?

问题描述 ibatis中,用什么方式查询分页效率高? 我的数据量比较大. 解决方案 ibatis 又不是数据库,它又不知道如何分页..他只是一个sql builder比如mysql里面的分页是用limit offset来做的,你就用ibatis写一个limit offset好了其它类型的数据库以此类推.与其说分页的效率,不如说是你sql语句查询的效率如何,最简单看有查询有没有用到索引,在mysql里面用explain select xxxx from xxx where解决方案二:三层嵌套是or

hibernate-Hibernate分页效率问题

问题描述 Hibernate分页效率问题 项目中使用了公司封装的数据库操作jar,但Hibernate分页效率总是不高,怀疑底层是先查后分页的情况,底子不好 各位大神劳烦看下 是先查询后分的页吗?(请先回答此问题) 有什么优化建议没? sqlstr 为sql语句,mapps为条件 public Map getList(String sqlstr, Map mapps, int iPageNo, int iPageSize) throws DAOException { HibernateCallb

php MySQL与分页效率_php技巧

 最基本的分页方式: SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ... 在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引: 举例来说,如果实际SQL类似下面语句,那么在category_id, id两列上建立复合索引比较好: SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10 子查询的分页方式: 随着数据量的增加,页数

sql千万级数据分页效率分析与方法

sql千万级数据分页效率分析与方法 select top 100 * from (select top 500 * from T1 order by id asc) a order by id desc 先asc取前500条 再倒着取(desc)这个结果的100条... MSSQL在我这里测试通过 这个ID字段如果是默认的升序序列 也是主键列 那下面这句就能实现了 select * from t1 where id between 400 and 500 我就知道三种方法 having in  

MySQL提高分页效率_Mysql

下面就是大数据量时提高分页的效率的测试代码,分享给大家. --提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging" use TestForPaging go --创建表SomeData create table SomeData ( id int primary key, name varchar(30) null, description text ) go --插入数据 insert into SomeData values(1,'num1

PHP分页效率终结版(推荐)

本篇文章是对PHP分页的实现进行了详细的分析介绍,需要的朋友参考下   这里仅展示出设计思路,具体安全问题,是否同步更新等可根据具体需求添加修改:以前人们常用的PHP分页技 术,通常都需要先统计出数据库中总信息条数才能判断出总页数并对其进行分页,,也就是说,每次分页要对数据库进行两次调用,在面临大数据量,高并发查询情 况下是很不效率的,曾经一直为这个问题烦恼但都没想到合适的解决方法,今天突然在睡梦中 遇见奇迹...具体分析原理如下:(红色部分为优化后的区别,思路采用最原始的代码书写,为了照顾新人