`
rbible
  • 浏览: 52940 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 使用leading, use_nl, rownum调优例子

阅读更多

1、使用leading和use_nl来设置表的查询顺序,来加快查询速度,一般把小表设为第一个表。

/*+LEADING(TABLE)*/

   将指定的表作为连接次序中的首表.

/*+USE_NL(TABLE)*/

   将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.

成本计算方法:

设小表100行,大表100000行。

两表均有索引:

    如果小表在内,大表在外(驱动表)的话,则扫描次数为:

    100000+100000*2 (其中2表示IO次数,一次索引,一次数据)

    如果大表在内,小表在外(驱动表)的话,则扫描次数为:

    100+100*2.

两表均无索引:

    如果小表在内,大表在外的话,则扫描次数为:

    100000+100*100000

    如果大表在内,小表在外的话,则扫描次数为:

    100+100000*100

注意:

    如果一个表有索引,一个表没有索引,ORACLE会将没有索引的表作驱动表。

    如果两个表都有索引,则外表作驱动表。

    如果两个都没索引的话,则也是外表作驱动表。

 

2、使用index直接匹配索引来查询数据提高查询速度

  表明对表选择索引的扫描方法.

 

3、当判断某几个表中是否存在某种关系的行时可使用rownum=1来作为条件而加快速度,如果必须有多行才满足条件时,可设置rownum <= n。

例如:获得一个v_count值判断是否大于0,equipment表 几万条,controledpnsnrange 几千条

select count(sc.pmnum)
  into v_count
  from equipment e, sal_controledpnsnrange sc
 where (sc.new_min_item_no <= e.itemnum)
   and (sc.new_max_item_no >= e.itemnum)
   and (sc.new_min_serial_no <= e.serialnum)
   and (sc.new_max_serial_no >= e.serialnum)
   and e.itemnum = a_item_no;

 执行时间大约为3分钟。

 

代码修改后:

select /*+ leading(e) use_nl(sc) */
 count(sc.pmnum)
  into v_count
  from equipment e, sal_controledpnsnrange sc
 where (sc.new_min_item_no <= e.itemnum)
   and (sc.new_max_item_no >= e.itemnum)
   and (sc.new_min_serial_no <= e.serialnum)
   and (sc.new_max_serial_no >= e.serialnum)
   and e.itemnum = a_item_no;

 执行时间大约为45秒。

 

代码再次修改后:

select /*+ leading(e) use_nl(sc) */
 count(sc.pmnum)
  into v_count
  from equipment e, sal_controledpnsnrange sc
 where (sc.new_min_item_no <= e.itemnum)
   and (sc.new_max_item_no >= e.itemnum)
   and (sc.new_min_serial_no <= e.serialnum)
   and (sc.new_max_serial_no >= e.serialnum)
   and e.itemnum = a_item_no
   and rownum = 1;

 执行时间大约为4秒。

 

 

转自:http://blog.chinaunix.net/uid-574845-id-2734102.html

分享到:
评论

相关推荐

    oracle DBA_TAB_MODIFICATIONS 刷新

    Oracle DBA_TAB_MODIFICATIONS 是一个系统视图,用于跟踪数据库中的表在最近的DML(数据操纵语言)操作后的变化情况。这个视图是数据库性能监控的重要工具,它记录了表的插入、更新和删除等操作的信息。然而,它有...

    oracle查询效率调优实例

    这些技术包括正确使用 `LEADING` 和 `USE_NL` 提示来指导连接顺序和连接算法的选择,利用 `INDEX` 提示来利用索引,以及使用 `ROWNUM` 来限制结果集的大小。掌握这些技巧对于提高 Oracle 查询效率至关重要。

    BBS.rar_oracle_oracle projects_oracle项目

    同时,为了实现分页功能,开发者可能利用了Oracle的ROWNUM伪列或者SQL的OFFSET-FETCH或LIMIT子句,以高效地分批次检索数据,避免一次性加载过多内容导致页面响应变慢。 【标签】"oracle oracle_projects oracle项目...

    oracle rownum 的使用 和sqlserver有区别的!

    ### Oracle ROWNUM 使用详解与 SQL Server 区别 在数据库操作中,ROWNUM 是一个非常重要的伪列,主要用于返回查询结果的行序号。它在 Oracle 数据库中有着广泛的应用场景,尤其是在需要对查询结果进行分页显示、...

    oracle_SQL中rowid与rownum的使用

    注意:在Oracle 12c及更高版本中,可以使用`FETCH FIRST N ROWS ONLY`来代替`ROWNUM`进行分页。 总结,`ROWID`和`ROWNUM`在Oracle SQL中各自扮演着不可或缺的角色。`ROWID`提供了直接访问数据的快速途径,而`ROWNUM...

    oracle_SQL中ROWID与ROWNUM的使用

    ### Oracle SQL中ROWID与ROWNUM的使用 #### ROWNUM 的使用——TOP-N 分析 在 Oracle SQL 中,`ROWNUM` 是一种特殊的伪列,用于标识查询结果集中的行编号。它常用于实现 TOP-N 查询,即返回结果集中满足特定条件的...

    MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束、ROWNUM.rar

    【标题】"MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束、ROWNUM.rar"涉及的是Java编程与Oracle数据库管理的相关知识,主要聚焦在如何在Oracle数据库中修改约束以及使用ROWNUM函数进行数据筛选。 【描述】描述中提到...

    ROWNUM的使用技巧

    ROWNUM 是 Oracle 中的一种伪列,它可以根据返回记录生成一个序列化的数字。利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊...

    MLDN魔乐科技_Oracle课堂19_修改约束、ROWNUM

    在Oracle数据库管理中,理解和掌握如何修改约束以及使用ROWNUM是非常重要的技能。本篇将深入探讨这两个核心概念,并通过MLDN魔乐科技的Oracle课堂19视频课程进行详细讲解。 首先,我们来讨论"修改约束"。在Oracle中...

    如何在Oracle中实现SELECT_TOP_N的方法

    Oracle中通常使用`ROWNUM`和`ORDER BY`结合的方式实现`SELECT TOP N`的功能。首先对数据进行排序,然后通过`ROWNUM`限制返回的行数。例如,如果我们有一个名为`CUSTOMER`的表,想按`NAME`字段的字母顺序获取前三个...

    oracle rownum和distinct

    "Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,...

    对于 Oracle 的 rownum 问题

    而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明 假设某个表 t1(c1) 有 20...

    oracle_SQL-rowid--rownum.zip_oracle

    同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合步骤.doc`、`Spring事物配置.doc`、`Struts2防止表单重复提交.doc`、`SSH改造DAO.doc`涉及的是其他...

    OracleSQL.zip_oracle

    这份"OracleSQL.zip_oracle"压缩包包含了有关Oracle SQL的详细文档,名为"Oracle_SQL语句大全.doc",旨在提供全面的Oracle SQL语法和用法指南。 1. **SQL基础**:SQL(Structured Query Language)是用于管理和处理...

    ORACLE 中ROWNUM用法总结

    `ROWNUM`在Oracle中是一个强大但需谨慎使用的工具。正确理解其行为逻辑,特别是在处理比较运算符时,是至关重要的。通过合理的设计查询结构,可以充分发挥`ROWNUM`的优势,实现在大型数据集上的高效查询和分页功能。...

    Oracle中rownum的使用

    Oracle中rownum的使用

    Oracle_审计表_sys.aud$_授权给用户Truncate权限.docx

    ### Oracle 审计表 Sys.Aud$ 授权与管理 #### 概述 在Oracle数据库管理系统中,审计功能是一项重要的安全特性,它记录了数据库的所有访问活动,包括但不限于登录、查询、更新等操作。这些审计记录通常存储在系统表...

    Oracle--ROWNUM.rar_oracle

    Oracle数据库系统是世界上最广泛使用的数据库之一,尤其在企业级应用中占据重要地位。在Oracle中,`ROWNUM`是一个非常重要的概念,它涉及到数据检索、分页查询以及优化查询性能等多个方面。本篇将深入探讨`ROWNUM`的...

Global site tag (gtag.js) - Google Analytics