`
无量
  • 浏览: 1148136 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle-SQL优化-union和union all

阅读更多
用union all替代union
Union因为要进行去除重复值的处理,所以效率要低
适用场合:1-如果合并两个select结果集,没有刻意要去除重复行
          2-如果union的各个select结果集,不存在交集
Oracle的内部处理过程:
union操作:先执行union all操作获取所有数据合集,再执行去除重复行操作。所以如果没有重复的,不要用union,效率低


下面通过一个案例说明一下
Sql1:union联合两个结果集
select DEAL_SERIAL_NO,
       VERSION_NO,
       START_DATE,
       END_DATE,
       PERIOD,
       COMPD_METHOD
  from tbinstcfl
union
select INTER_CODE as DEAL_SERIAL_NO,
       VERSION_NO,
       START_DATE,
       END_DATE,
       PERIOD,
       COMPD_METHOD
  from tbbondcfl
执行计划如下图:一共耗时6ms

Union操作:要先执行UNION-ALL操作获取结果集,再执行SORT-UNIQUE操作,看后面的时间,这个操作耗费2ms,如果数据量非常多的话,这个操作耗时和资源是非常惊人的。
Sql2:union all联合两个结果集
select DEAL_SERIAL_NO,
       VERSION_NO,
       START_DATE,
       END_DATE,
       PERIOD,
       COMPD_METHOD
  from tbinstcfl
union all
select INTER_CODE as DEAL_SERIAL_NO,
       VERSION_NO,
       START_DATE,
       END_DATE,
       PERIOD,
       COMPD_METHOD
  from tbbondcfl
执行计划如下图:一共耗时3ms

Union all操作:少了去除重复操作。去重复一项和上面比,就少了2ms,再看两个执行计划的最后一步整合数据,sql1用了2ms,sql2用了1ms,效率是不是高了很多

union和union all关键字需要注意的问题是:
union 和 union all都可以将多个结果集合并,而不仅仅是两个,你可以将多个结果集串起来。
使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。例如下面是一个例子:

select empno,ename from emp
union
select deptno,dname from dept
我们没有必要在每一个select结果集中使用order by子句来进行排序,我们可以在最后使用一条order by来对整个结果进行排序。例如:
select empno,ename from emp
union
select deptno,dname from dept
order by ename;

对多个结果集进行合并处理的关键字有union,union all,intersect,minus
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。


对上面两个结果集进行intersect操作,
Sql3:
select DEAL_SERIAL_NO,
       VERSION_NO,
       START_DATE,
       END_DATE,
       PERIOD,
       COMPD_METHOD
  from tbinstcfl
intersect
select INTER_CODE as DEAL_SERIAL_NO,
       VERSION_NO,
       START_DATE,
       END_DATE,
       PERIOD,
       COMPD_METHOD
  from tbbondcfl
执行计划如下图:一共耗时7ms

对上面两个结果集进行intersect操作,
select DEAL_SERIAL_NO,
       VERSION_NO,
       START_DATE,
       END_DATE,
       PERIOD,
       COMPD_METHOD
  from tbinstcfl
minus
select INTER_CODE as DEAL_SERIAL_NO,
       VERSION_NO,
       START_DATE,
       END_DATE,
       PERIOD,
       COMPD_METHOD
  from tbbondcfl
执行计划如下图:一共耗时7ms

总结:对两个结果集的union,union all,intersect,minus操作
耗时:
Union all:3ms
1.两个结果集的全表扫描获取2.获取所有展现数据
Union:6ms
1.两个结果集的全表扫描获取2.去除重复操作3.获取所有展现数据
Intersect:7ms
1.两个结果集的全表扫描获取2.两个结果集的唯一性排序3.获取交集4.获取所有展现数据
Minus:7ms
1. 两个结果集的全表扫描获取2.两个结果集的唯一性排序3.获取差集4.获取所有展现数据
Intersect和minus的获取交集和差集如执行计划图,没有耗费时间,这个内部机制没有研究,不过由于之前是唯一性排序,所以即使耗时也很少,就当做不耗时了

了解内部运行机制:优化一切尽在掌握

  • 大小: 16 KB
  • 大小: 13.2 KB
  • 大小: 16.8 KB
  • 大小: 16.5 KB
分享到:
评论
1 楼 yong7356 2015-03-05  
学习一下。。Oracle-SQL优化-union和union all

相关推荐

    oracle的sql优化

    Oracle的SQL优化是数据库管理中的关键任务,它旨在提高查询速度、降低资源消耗,从而提升整个系统的性能。以下是一些重要的优化策略: 1. **全表扫描与索引扫描**: - 全表扫描应尽量避免,尤其对于大数据量的表,...

    Oracle和SqlServer语法区别

    Oracle和SqlServer语法区别 Oracle和SqlServer是两种流行的关系型数据库管理系统,它们之间存在着一些语法区别。了解这些区别对于开发者来说非常重要,因为它可以帮助他们更好地迁移到新的数据库管理系统。下面将...

    oracle-sql.rar_oracle

    Oracle数据库系统是由甲骨文公司开发的,它支持多种SQL语法,提供了丰富的功能和高效的性能。下面,我们将深入探讨Oracle SQL的一些经典查询语句,以及它们的基础和扩展应用。 一、基础SQL查询语句 1. SELECT语句...

    Oracle-SQL基本查询.ppt

    在Oracle数据库管理系统中,SQL(Structured Query Language)是一种标准化的语言,用于管理和操作关系数据库。SQL-89、SQL-92和SQL-99是其在不同时间段被ISO采纳的版本,它集成了数据查询、操纵、定义、控制等功能...

    基于Oracle的SQL优化典型案例分

    - 使用索引进行分组和排序,或者使用`MINUS`和`UNION ALL`替代`GROUP BY`。 - 利用`HAVING`子句替换嵌套的`WHERE`子句,避免对所有记录进行不必要的计算。 7. **游标和批量处理** - 游标常用于迭代处理,但过度...

    oracle-sql内置函数大全

    Oracle SQL内置函数是数据库操作中不可或缺的部分,它们用于处理各种数据类型,如数字、日期、字符串等。在Oracle 8i版本中,内置函数的丰富性使得数据处理更加灵活高效。以下是一些主要的内置函数及其说明: 1. **...

    union all与order by用法

    在 Oracle PL/SQL 中, UNION ALL 和 ORDER BY 的使用需要遵循一定的规则和限制。本文将详细介绍 UNION ALL 和 ORDER BY 的用法,并通过实例解释其应用场景。 UNION ALL 的用法 UNION ALL 用于合并两个或多个 ...

    Oracle-SQL语句(连接查询).doc

    在Oracle中,全连接并不总是可用,但在某些版本中可以通过自连接和UNION ALL操作来模拟。例如: ```sql select t1.name, t2.name from (cip_temps t1 full join cip_tmp t2 on t1.ID = t2.id) union all select...

    数据库培训-SQL优化案例

    数据库SQL优化常见问题及案例:OR 与 UNION ALL的比较、EXISTS 和JION ON、统一SQL的绑定变量、物化视图代替SQL语句、索引

    oracle官方文档chm合集-sql参考手册

    2. **SQL语法**:Oracle SQL遵循标准SQL语法,但也有其特有的扩展和优化。例如,它支持子查询、联接(JOIN)、集合操作(UNION, INTERSECT, EXCEPT)以及分组(GROUP BY)和聚合函数(如COUNT, SUM, AVG, MAX, MIN)...

    ORACLE-排序优化[归纳].pdf

    在Oracle中,排序主要用于执行`ORDER BY`、`GROUP BY`、`UNION`、`DISTINCT`等SQL操作,这些操作都需要对数据进行特定顺序的组织。 排序的内部机制主要包括内存排序和磁盘排序两种方式。内存排序是在PGA(Program ...

    Oracle Sql 优化

    ##### 3.37 用UNION-ALL替换UNION(如果有可能的话) `UNION ALL`不进行去重操作,比`UNION`更快,如果数据中没有重复记录,应优先使用`UNION ALL`。 ##### 3.38 使用提示(Hints) SQL提示可以在查询中指导优化器...

    OracleSQL优化-中级篇.rar

    7. SQL语法优化:避免使用子查询、嵌套循环和不必要的连接,尽可能使用连接运算符(如UNION ALL而非UNION)和集合函数,可以减少计算开销。 8. 版本控制和历史数据管理:在处理历史数据时,时间相关的表设计(如...

    基于Oracle数据库的几种常见SQL优化策略.pdf

    本文档主要讨论了基于Oracle数据库的几种常见SQL优化策略,以提高数据库的处理性能和查询效率。在当前大数据和物联网发展的背景下,数据库的性能优化变得越来越重要。Oracle数据库作为当前使用最为广泛的数据库管理...

    ORACLE与SQLSERVER语法差异分析

    - 在SQL SERVER中,递归查询通常使用`WITH`子句创建公共表表达式(CTE),结合`UNION ALL`和`JOIN`来实现。如示例所示,`cte_root`或`cte_child`定义递归起点,`connect by ID=prior ParentID`表示递归路径。 - ...

    oracle sql优化

    Oracle SQL 优化是提高数据库性能的关键技术之一,尤其是在处理大量数据和复杂查询时。以下是一些重要的优化策略和技巧: 1. **执行路径优化**:Oracle 提供高速缓冲(Cache Buffering)机制来加速单表查询,但对于...

    oracle和sql server区别

    集合操作:在 SQL 中只有 UNION(并操作),Oracle 中包含 MINUS(差操作)、INTERECT(交操作)、UNION(并操作)。 索引 ---- SQL 的索引分为聚集索引和非聚集索引,还包括全文索引;Oracle 的索引包括:B+树...

    oracle集合union、union all、intersect、minus

    Oracle 集合操作是指在数据库中对数据进行集合运算的操作,包括 union、union all、intersect 和 minus 等操作。这些操作可以对数据进行合并、交叉、差异等处理,提高数据处理效率。 union 操作 Union 操作是将两...

    oracle_sql优化

    在Oracle SQL优化这一主题下,我们探讨了多个关键性能影响因素以及如何针对这些因素进行优化。以下是基于给定文件信息的详细分析与建议: ### 1. 唯一索引的重要性 唯一索引(Unique Index)是确保数据行唯一性的...

    Sql Server与Oracle的区别

    - **UNION运算符**:Oracle允许在SELECT语句中使用UNION运算符,而Sql Server则提供了更丰富的选项,如COMPUTE子句和FOR BROWSE选项。 - **优化策略**:Oracle的基于开销的优化提示在Sql Server中可能不适用,建议...

Global site tag (gtag.js) - Google Analytics