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秒。
相关推荐
Oracle DBA_TAB_MODIFICATIONS 是一个系统视图,用于跟踪数据库中的表在最近的DML(数据操纵语言)操作后的变化情况。这个视图是数据库性能监控的重要工具,它记录了表的插入、更新和删除等操作的信息。然而,它有...
这些技术包括正确使用 `LEADING` 和 `USE_NL` 提示来指导连接顺序和连接算法的选择,利用 `INDEX` 提示来利用索引,以及使用 `ROWNUM` 来限制结果集的大小。掌握这些技巧对于提高 Oracle 查询效率至关重要。
同时,为了实现分页功能,开发者可能利用了Oracle的ROWNUM伪列或者SQL的OFFSET-FETCH或LIMIT子句,以高效地分批次检索数据,避免一次性加载过多内容导致页面响应变慢。 【标签】"oracle oracle_projects oracle项目...
### Oracle ROWNUM 使用详解与 SQL Server 区别 在数据库操作中,ROWNUM 是一个非常重要的伪列,主要用于返回查询结果的行序号。它在 Oracle 数据库中有着广泛的应用场景,尤其是在需要对查询结果进行分页显示、...
注意:在Oracle 12c及更高版本中,可以使用`FETCH FIRST N ROWS ONLY`来代替`ROWNUM`进行分页。 总结,`ROWID`和`ROWNUM`在Oracle SQL中各自扮演着不可或缺的角色。`ROWID`提供了直接访问数据的快速途径,而`ROWNUM...
### Oracle SQL中ROWID与ROWNUM的使用 #### ROWNUM 的使用——TOP-N 分析 在 Oracle SQL 中,`ROWNUM` 是一种特殊的伪列,用于标识查询结果集中的行编号。它常用于实现 TOP-N 查询,即返回结果集中满足特定条件的...
【标题】"MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束、ROWNUM.rar"涉及的是Java编程与Oracle数据库管理的相关知识,主要聚焦在如何在Oracle数据库中修改约束以及使用ROWNUM函数进行数据筛选。 【描述】描述中提到...
ROWNUM 是 Oracle 中的一种伪列,它可以根据返回记录生成一个序列化的数字。利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊...
在Oracle数据库管理中,理解和掌握如何修改约束以及使用ROWNUM是非常重要的技能。本篇将深入探讨这两个核心概念,并通过MLDN魔乐科技的Oracle课堂19视频课程进行详细讲解。 首先,我们来讨论"修改约束"。在Oracle中...
Oracle中通常使用`ROWNUM`和`ORDER BY`结合的方式实现`SELECT TOP N`的功能。首先对数据进行排序,然后通过`ROWNUM`限制返回的行数。例如,如果我们有一个名为`CUSTOMER`的表,想按`NAME`字段的字母顺序获取前三个...
"Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,...
而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明 假设某个表 t1(c1) 有 20...
同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合步骤.doc`、`Spring事物配置.doc`、`Struts2防止表单重复提交.doc`、`SSH改造DAO.doc`涉及的是其他...
这份"OracleSQL.zip_oracle"压缩包包含了有关Oracle SQL的详细文档,名为"Oracle_SQL语句大全.doc",旨在提供全面的Oracle SQL语法和用法指南。 1. **SQL基础**:SQL(Structured Query Language)是用于管理和处理...
`ROWNUM`在Oracle中是一个强大但需谨慎使用的工具。正确理解其行为逻辑,特别是在处理比较运算符时,是至关重要的。通过合理的设计查询结构,可以充分发挥`ROWNUM`的优势,实现在大型数据集上的高效查询和分页功能。...
Oracle中rownum的使用
### Oracle 审计表 Sys.Aud$ 授权与管理 #### 概述 在Oracle数据库管理系统中,审计功能是一项重要的安全特性,它记录了数据库的所有访问活动,包括但不限于登录、查询、更新等操作。这些审计记录通常存储在系统表...
Oracle数据库系统是世界上最广泛使用的数据库之一,尤其在企业级应用中占据重要地位。在Oracle中,`ROWNUM`是一个非常重要的概念,它涉及到数据检索、分页查询以及优化查询性能等多个方面。本篇将深入探讨`ROWNUM`的...