`
dd350356750
  • 浏览: 74970 次
  • 性别: Icon_minigender_1
  • 来自: 怀化
社区版块
存档分类
最新评论

请问在Oracle中取第10条记录到第20条记录,效率最高的SQL语句怎么写?

    博客分类:
  • java
阅读更多
oracle

select   *   from   table   where   rownum<20   
  minus   
  select   *   from   table   where   rownum<10   

//但这种查询的效率更高于前者 (556436条数据,测试结果)
select * from (select rownum r,a.* from blog a where rownum<=20) where r>=10;



mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: 
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目: 
mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

//换句话说,LIMIT n 等价于 LIMIT 0,n



mysql limit查询优化[转载],由于limit经常用到,却没有注意,因为平时做的项目都比较小,所以也没有考虑去怎么优化,今天看了一篇关于mysql limit优化的文章,感觉很好 于是转载过来

原文地址在这里
http://www.phpobject.net/blog/read.php?119

MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。
       同样是取10条数据

select * from yanxue8_visit limit 10000,10        和

 

select * from yanxue8_visit limit 0,10 


就不是一个数量级别的。

    网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。原文地址:http://www.zhenhua.org/article.asp?id=200

    文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核 (3GHZ) +4G内存 mysql 5.0.19)

1、offset比较小的时候。

select * from yanxue8_visit limit 10,10 


   多次运行,时间保持在0.0004-0.0005之间

Select * From yanxue8_visit Where vid >=(

Select vid From yanxue8_visit Order By vid limit 10,1

) limit 10 


  多次运行,时间保持在0.0005-0.0006之间,主要是0.0006
 结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。


2、offset大的时候。

select * from yanxue8_visit limit 10000,10 


   多次运行,时间保持在0.0187左右

Select * From yanxue8_visit Where vid >=(

Select vid From yanxue8_visit Order By vid limit 10000,1

) limit 10 


多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。

以后要注意改正自己的limit语句,优化一下mysql了

分享到:
评论
3 楼 dopic 2009-03-17  
又是从网上转的
2 楼 dd350356750 2008-09-28  
xuyelongjava 写道

先TOP查询30行 用order by desc 把查到的颠倒过来 然后再用TOP 查询前10行 &nbsp; 不就出来了么 &nbsp;&nbsp;&nbsp; 这样更简单啊

在oracle 里not SQLServer 没有top关键字
当然:select   *   from   table   where   rownum<20     
  minus     
  select   *   from   table   where   rownum<10     
他的效率也不是很好的。
select   *   from   (select   rownum   r,a.*   from   yourtable   a   where   rownum   <=   20)   where   r   >=   10
这个可能会更好些?
1 楼 xuyelongjava 2008-09-26  
先TOP查询30行 用order by desc 把查到的颠倒过来
然后再用TOP 查询前10行
  不就出来了么
    这样更简单啊

相关推荐

    oracle常用sql语句

    ### Oracle常用SQL语句知识点详解 #### 一、概述 Oracle是全球领先的数据库管理系统之一,在企业级应用领域占据着重要地位。SQL(Structured Query Language)是用于管理关系型数据库的标准语言,也是与Oracle...

    java笔记\Oracle里sql不能用limit的处理

    如果我们想要查询第11-20条记录,我们可以使用以下SQL语句: ```sql SELECT t_col1,t_col2 FROM t_table_name WHERE rownum &gt; 10 and rownum &lt;= 20; ``` 二、使用Minus运算符实现分页查询 除了使用RowNum函数,...

    查询前几条记录

    例如,如果你想从第11条开始取10条记录,`LIMIT 10, 10`就能实现。 然而,不同的数据库系统可能有不同的语法。例如,在PostgreSQL中,可以使用`FETCH FIRST N ROWS ONLY`或`OFFSET M ROWS FETCH NEXT N ROWS ONLY`...

    数据库分页SQL语句实现

    在这个例子中,`LIMIT 10, 20`表示从第11条记录开始取20条记录,也就是第10页的数据。 2. **注意事项:** - `LIMIT`关键字非常直观易用,但在大数据量的情况下,如果`OFFSET`值过大,性能会受到影响。 - 可以...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

     第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq动态sql  第28章 ...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

    读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...

    Oracle 11g SQL和PL SQL从入门到精通〖送源代码〗

    读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,而且可以掌握SQL语句和PL/SQL的各种基础知识和高级特征(记录类型、集合类型...

    使用简单的SQL语句实现的Oracle数据库分页技术

    ### 使用简单的SQL语句实现的Oracle数据库分页技术 #### 环境:Oracle 9i 在Oracle数据库中实现分页查询是一项常见的需求,尤其是在处理大量数据时。本文将介绍一种利用简单SQL语句来实现Oracle数据库分页的方法,...

    Oracle经典SQL语句大全

    这些语句向`student_1`表中添加了四条记录,其中部分字段为空值或未给出具体值。 ### 查询特定条件的数据 接下来是一些查询语句示例,这些语句用于根据特定条件检索数据: ```sql SELECT studName FROM student_1...

    数据库分页SQL语句.pdf

    例如,从表 Sys_option 中从第 10 条记录开始检索 20 条记录,语句如下: ```sql SELECT * FROM ( SELECT TOP 20 * FROM ( SELECT TOP 29 * FROM Sys_option ORDER BY sys_id DESC ) t1 ) t2 ORDER BY ...

    oracle常用SQL语句

    - 向表 `a` 中插入一条记录,值为 `1`。 - **命令**: `insert into a values(1);` **10. 查询记录** - 查询表 `a` 中的所有记录。 - **命令**: `select * from a;` **11. 更改记录** - 更新表 `a` 中的记录,...

    Oracle的sql语句练习题含答案

    17. **排序**:第十七题和第十八题涉及到`ORDER BY`语句,用于按指定字段排序数据。 18. **多级排序**:第十九题展示了如何进行多级排序,先按工作降序,再按薪金升序。 19. **日期格式化**:第二十题中,`TO_CHAR...

    Oracle 11g SQL和PL SQL从入门到精通.part1

     第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq动态sql  第28章 ...

    2个SQL优化语句,查询出来哪条SQL语句占据资源最多.rar

    例如,在Oracle数据库中,我们可以使用`V$SQL`视图来获取SQL语句的相关统计信息。查询可能包含以下关键部分: ```sql SELECT sql_text, total_executions, cpu_time, (cpu_time/total_executions) as avg_cpu_time ...

    三种数据库利用SQL语句进行高效果分页,分页

    以下是一个示例,假设我们要从名为 `components` 的表中获取每页显示 10 条记录,当前页为第 2 页(即显示第 11-20 条记录): ```sql SELECT TOP 10 * FROM components WHERE id NOT IN (SELECT TOP 10 * 10 id ...

    jdbc 分页 sql语句

    例如,假设当前页码为2,每页显示10条记录,则对应的SQL查询条件应该是`ROWNUM BETWEEN 11 AND 20`。 3. **优化性能**:为了提高分页查询的效率,可以考虑以下几个方面: - 为经常用于排序和过滤的列建立索引。 -...

    Oracle高级sql学习与练习

    7. CASE表达式是SQL中的条件表达式,类似于编程语言中的switch-case结构,用于在SELECT语句中进行条件判断,并返回不同的结果。 8. ROWNUM-TOP-N分析,使用ROWNUM伪列进行结果集的分页显示,以及处理具有行级计算的...

    关于SQL Server SQL语句查询分页数据的解决方案

    例如,从表`Sys_option`(主键为`sys_id`)中从第10条记录开始检索20条记录,可以使用以下SQL语句: ```sql SELECT * FROM ( SELECT TOP 20 * FROM ( SELECT TOP 29 * FROM Sys_option ORDER BY sys_id DESC )...

    用SQL语句实现分页(Oracle版Sql Server版)

    这条SQL语句从`USER`表中选取第10到第19行的数据。需要注意的是,这里的`&lt; 20`意味着不会包括第20行。 #### 二、SQL Server数据库分页实现 在SQL Server中,并没有直接提供类似Oracle中`ROWNUM`这样的功能来实现...

Global site tag (gtag.js) - Google Analytics