如果你是Oracle
多表查询优化方面的新手,对Oracle多表查询优化的相关实际应用不是很了解的话,以下的文章会给你提供更全面的知识。以下就是文章的详细内容的介绍,望你会有所了解。
Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
例如:
(低效,执行时间156.3秒)
-
SELECT …
-
FROM EMP E
-
WHERE SAL
>
; 50000
-
AND
JOB
= ‘MANAGER’
-
AND 25
<
(SELECT COUNT(*) FROM EMP
-
WHERE
MGR
=
E
.EMPNO);
(高效,执行时间10.6秒)
-
SELECT …
-
FROM EMP E
-
WHERE 25
<
(SELECT COUNT(*) FROM EMP
-
WHERE
MGR
=
E
.EMPNO)
-
AND SAL
>
; 50000
-
AND
JOB
= ‘MANAGER’;
重点关注3:SELECT子句中避免使用 ‘ * ‘ .重点关注
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法.
实际上,Oracle在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过Oracle多表查询数据字典完成的,
这意味着将耗费更多的时间.
7. 减少访问数据库的次数
当执行每条SQL语句时, Oracle在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少Oracle的工作量.
例如,
以下有三种方法可以检索出雇员号等于0342或0291的职员.
方法1 (最低效)
-
SELECT EMP_NAME , SALARY , GRADE
-
FROM EMP
-
WHERE
EMP_NO
=
342
;
-
SELECT EMP_NAME , SALARY , GRADE
-
FROM EMP
-
WHERE
EMP_NO
=
291
;
方法2 (次低效)
-
DECLARE
-
CURSOR C1 (E_NO NUMBER) IS
-
SELECT EMP_NAME,SALARY,GRADE
-
FROM EMP
-
WHERE
EMP_NO
=
E_NO
;
-
BEGIN
-
OPEN C1(342);
-
FETCH C1 INTO …,..,.. ;
-
OPEN C1(291);
-
FETCH C1 INTO …,..,.. ;
-
CLOSE C1;
-
END;
分享到:
相关推荐
本文将深入探讨Oracle与MySQL在查询优化器方面的差异,包括它们的优化策略、成本估算、可用的优化器提示和代码示例。 Oracle和MySQL在查询优化器方面各有特点。Oracle的CBO提供了更多的查询转换和执行计划选择,适合...
总的来说,理解并熟练掌握Oracle中多表关联的批量插入、更新和删除操作,能够有效优化数据库性能,提高开发效率,并且减少因频繁的单条操作导致的错误可能性。在设计数据库方案时,应充分利用这些特性,为应用程序...
Oracle教程与代码示例是针对数据库管理初学者和专业人员设计的一套综合学习资源,它涵盖了Oracle数据库系统的基础知识以及实战技巧。Oracle是全球最受欢迎的关系型数据库管理系统之一,广泛应用于企业级数据存储、...
《oracle pl/sql程序设计(第5版)》不但介绍了大量的oracle 11g的pl/sql新性能,还提供了许多优化pl/sql性能的新方法。 简单目录 《oracle pl/sql程序设计(第5版)(上册)》 (上册) 第1部分 pl/sql编程 第1章 pl/...
这些示例数据库包含了各种各样的表、视图、存储过程和其他数据库对象,用于演示和学习Oracle的功能。 1. **Oracle示例数据库OT**: OT(Oracle Technology)示例数据库是一个包含了多种业务场景的数据集合,包括...
通过`ROWNUM`函数和子查询的方式,进一步保证了即使有多条记录在上述列上完全相同,也只会有一条被插入到临时表中。 3. **删除原表并重命名临时表**:最后,通过`DROP TABLE tlinkman;`和`ALTER TABLE tlinkman2 ...
崔华的《基于Oracle的SQL优化》一书深入探讨了如何通过优化SQL查询来最大化Oracle数据库的效率。这本书的配套脚本提供了一手的实践案例,帮助读者理解和应用理论知识。 首先,我们来讨论SQL优化的重要性。在Oracle...
在Oracle数据库中,进行表内数据去重是一项常见的任务,特别是在处理大量数据时。面对一个包含一亿条记录,且每个记录只有一个字段`mobile`的`bao_mobile_temp`表,如何高效地去除重复数据,是本文要探讨的核心问题...
本书《Oracle PL/SQL程序设计(第5版)》由O'Reilly出版社出版,为学习和理解Oracle数据库的PL/ZIP编程语言提供了丰富的示例代码。通过分析这些示例,我们可以深入探讨Oracle PL/SQL的关键概念、语法以及最佳实践。 ...
以下是一个简单的VBA代码示例: ```vba Sub ExportFromOracle() Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset ' 设置Oracle数据库连接信息 conn.Open "Provider=OraOLEDB.Oracle;Data ...
本文将深入探讨Oracle分页查询的性能优化,并提供相关的代码示例。 首先,我们来看两种常见的分页查询方法: 1. **子查询与行号(ROWNUM)结合**: ```sql SELECT * FROM ( SELECT rownum RN, t.* FROM table t...
在提供的`Oracle表类型表变量使用.sql`文件中,很可能是包含了创建表类型、声明表变量和执行相关操作的示例代码。你可以通过运行这个脚本来实践表类型和表变量的使用。在实际操作中,可能包含如下内容: 1. 定义一...
在提供的代码示例中,`BULK COLLECT`指令被用来一次性读取多行数据到一个数组中。这种方式比逐行处理更加高效。 ```sql ref_bulk bulk_type; type cursor_type is ref cursor return emp_table%rowtype; c_bulk ...
标签中的"源码"提示我们可能会看到实际的Java代码示例,这对于学习和理解多线程编程以及Java与Oracle的交互非常有帮助。通过分析和研究这些代码,开发者能够掌握如何在实际项目中应用多线程技术,并理解如何有效利用...
示例代码可能包含创建事务表,运行关联规则挖掘,以及提取和解释规则的过程。 4. **序列模式挖掘(Sequential Pattern Mining)**:它在时间序列数据上工作,识别事件发生的顺序模式。例如,分析用户在网站上的浏览...
- **优化建议**:考虑改用`OR`连接多个条件,或使用外键引用的方式重构查询。 ##### 2. 使用 NOT EXISTS 或者外连接代替 NOT IN - **原因分析**:`NOT IN`同样会绕过索引,导致全表扫描。 - **优化建议**: - ...
示例代码将演示如何查询单表或多表的数据,以及如何使用聚合函数(COUNT、SUM、AVG等)进行统计分析。 4. **数据操作**:插入数据使用`INSERT INTO`,更新使用`UPDATE`,删除使用`DELETE`。这些示例会展示如何正确...
Oracle专家高级编程源代码主要涵盖了Oracle数据库系统的深层次开发与优化技术。这个资源可能是一本关于Oracle数据库编程和高级技巧的书籍的源代码实例,通过这些源代码,开发者可以深入理解Oracle的工作原理,学习...
通过对Oracle LIKE操作符的深入理解和合理优化,可以显著提高数据库查询性能。特别是通过创建适当的索引和使用反向索引技术,能够在大多数情况下避免全表扫描,从而提升整体系统效率。希望本文介绍的方法能够帮助...
Oracle 错误代码对应表是一种用于记录和跟踪 Oracle 数据库错误的表格,该表格中包含了各种错误代码、错误描述、SQLState 和示例代码等信息。下面是 Oracle 错误代码对应表中的一些关键知识点: 1. 唯一性约束...