`
duanhengbin
  • 浏览: 384653 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle 临时表用法的比较

阅读更多

临时表是复杂SQL性能优化中常见手段,总结一下。

   

1) Global Temporary 句  
  分为会话级和事务级两种。

   

  •   会话级的临时表

    【语法】

          Create Global Temporary Table Table_Name   
          (the aggregation SQL statement) On Commit Preserve Rows;    

    【特点】

               临时表数据自动清空后,但是临时表的结构以及元数据还存储在用户的数据字典中。表的定义对所有的会话可见。
               临时表不需要DML锁。
               可以索引临时表和在临时表基础上建立视图。
               在临时表上的索引也是临时的,也是只对当前会话或者事务有效。
               临时表可以拥有触发器。
               可以用export和import工具导入导出临时表的定义,但是不能导出数据。
   【适用场合】 

              当某一个SQL语句多表关联,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。
              程序执行过程中多次使用的临时数据,这些数据在整个程序的会话过程中都需要用的等等。
    【清除时点】 

               当某一个SESSION退出之后自动清除数据(表结构保留)
    【不足】 

               不支持lob对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。

               不支持主外键关系。
     
    例子: 
      CREATE GLOBAL TEMPORARY TABLE my_temporary
       (birthdate DATE,
        enddate   DATE,
        name CHAR(20)) ON COMMIT PRESERVE ROWS;

 

  •   事务级的临时表    

    【语法】

                Create Global Temporary Table Table_Name    
                   (the aggregation SQL statement) On Commit Delete Rows;  
    【清除时点】  当执行COMMIT之后自动清除数据(表结构保留)

     其他方面与会话级的临时表相同,不再列出。

 

2) with句

      准确的说with语句不叫临时表,但它与临时表使用概念上非常接近,同样列出。

     【语法】

                WITH  
                     subquery_name  
                  AS  
                    (the aggregation SQL statement) 
                  SELECT  
                    (query naming subquery_name);


    【特点】 

               附着于一个SQL 语句,也只对一个SQL语句产生作用。
               可以同时生成几张临时表。
               生存期极短,易于管理。
    【适用场合】 

                Global Temporary 的适用场合都适用,只是针对一个SQL的场合
                特别方便融入常量或集合运算结果,有简化SQL的作用。
    【清除时点】

                查询完成后立即清除(数据及表结构)。

    例子: 
      WITH
      sum_sales AS
        ( select /*+ materialize */
          sum(quantity) all_sales from stores ),
      number_stores AS
        ( select /*+ materialize */
          count(*) nbr_stores from stores ),
      sales_by_store AS
        ( select /*+ materialize */
        store_name, sum(quantity) store_sales from
        store natural join sales )
      SELECT
         store_name
      FROM
         store,
         sum_sales,
         number_stores,
         sales_by_store
      where
         store_sales > (all_sales / nbr_stores)
   

    (注:使用/*+ materialize */让Oracle基于cost-based(基于成本)的优化策略生成临时表。  )

分享到:
评论

相关推荐

    Oracle 临时表用法

    本文将详细介绍Oracle临时表的创建方法、使用场景以及优缺点,帮助读者更好地理解和运用这一特性。 #### 二、Oracle临时表概述 Oracle临时表是一种特殊的表,用于存储临时数据,通常用于事务处理或特定会话期间的...

    oracle临时表用法

    Oracle 临时表用法 Oracle 临时表是一种特殊的表结构,它可以在数据库中临时存储数据,用于实现一些特定的应用场景。下面是 Oracle 临时表的详细知识点: 创建临时表 创建临时表的语法为: ``` CREATE GLOBAL ...

    Oracle 临时表用法汇总

    临时表的应用 1)、当某一个SQL语句关联的表...可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。 2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。

    Oracle临时表空间不足和批处理缓慢问题探讨.pdf

    2. 解决临时表空间不足问题的方法:通过编写记录使用临时表空间 SQL 语句的脚本,抓取最消耗临时表空间的语句,并对其进行优化。 3. AWR 报告的作用:AWR 报告可以显示占用临时表空间最高的 SQL 语句,但可能不准确...

    ORACLE中临时表

    Oracle中的临时表是一种特殊的数据结构,用于存储会话或事务期间的数据,这些数据仅对当前会话可见,并在特定条件下自动清除。Oracle提供两种类型的临时表:事务型和会话型。 事务型临时表在事务开始时创建,插入的...

    oracle临时表

    Oracle临时表是数据库管理系统中的一种特殊表,它主要用于在会话期间存储临时数据,供当前会话使用。这种表在会话结束时会被自动删除,不会永久保存在数据库中,因此,它们对于处理大量中间结果或者进行复杂计算的...

    不让临时表空间影响ORACLE数据库性能

    - 文件"不要让临时表空间影响数据库性能 - Oracle - 3.mht"可能提供了实际的配置和优化步骤,包括脚本示例和监控工具的使用。 通过理解和优化临时表空间,可以显著提升Oracle数据库的性能,尤其是在处理大数据量和...

    oracle-临时表空间

    ### Oracle 临时表空间详解 ...总结而言,通过上述内容我们可以了解到Oracle数据库中临时表空间的基本概念、查询方法以及如何进行创建、修改和删除等操作。掌握这些知识点有助于更好地管理和优化数据库性能。

    Oracle中临时表的创建

    #### 二、Oracle临时表概述 临时表是Oracle提供的一种特殊类型的表,用于存储临时数据。它们通常用于执行复杂的计算任务或暂存中间结果,以减少对主表的访问次数,从而提升整体性能。根据生命周期的不同,临时表...

    OracleTemporaryTables(Oracle临时表).pdf

    Oracle Temporary Tables,也称为Oracle临时表,是在Oracle数据库中用于临时存储数据的特殊表。它们主要用在处理大型数据集时提高性能,特别是在复杂的查询和存储过程中。临时表的生命周期和可见性根据创建时指定的...

    oracle 临时表使用例子并用CURSOR返回结果集的例子

    本篇文章将深入探讨Oracle临时表的使用,并通过一个使用游标(CURSOR)返回结果集的例子来进一步理解其用法。 首先,让我们了解如何创建Oracle临时表。临时表的创建语法与普通表类似,但我们需要使用`GLOBAL ...

    Oracle临时表空间处理.txt

    综上所述,Oracle 数据库中临时表空间的管理涵盖了多个方面,包括查看、调整大小、创建、更改默认设置、删除以及监控使用情况等。通过对这些操作的熟练掌握,可以有效提高数据库的性能和稳定性。

    一个选查询后插入到一个临时表的oracle函数

    ### 一个选查询后插入到一个临时表的Oracle函数 #### 概述 在Oracle数据库环境中,函数是一种非常有用的数据库对象,它允许开发者封装复杂的逻辑并返回特定的结果。本文将详细解析一个特定的Oracle函数——`NS_...

    Oracle优化, 优化查询速度,目前所有使用Oracle作为数据库支撑平台的应用

    除了基本的使用方法之外,Oracle临时表还支持一些高级特性,如: - **索引**: 可以为临时表创建索引,进一步提高查询性能。 - **分区**: 对于非常大的数据集,可以考虑使用分区技术来管理临时表。 - **并发控制**: ...

    如何解决Oracle8i数据库临时表空间满的问题.pdf

    4. Oracle临时表空间满的问题:当临时表空间的磁盘空间被全部占用后,可能会出现错误消息,例如“ORA-1652: unable to extend temp segment by %s in tablespace %s”。这会导致用户无法完成如排序、并行查询等操作...

    ORACLE修改表空间大小

    当Oracle数据库执行涉及排序、连接等操作时,会使用临时表空间来存储临时数据。如果这些操作所需的空间超过了临时表空间的可用空间,就会引发ORA-01652错误。 #### 二、ORA-01652 错误分析 ##### 1. 错误现象 当...

    对比Oracle临时表和SQL Server临时表的不同点

    1. Oracle临时表: - **生命周期**:Oracle提供了两种类型的临时表,即会话级临时表和事务级临时表。会话级临时表在会话结束时自动清空数据,而事务级临时表则在事务结束(无论是提交或回滚)时清空。 - **数据...

    Oracle删除表中的重复数据

    在Oracle中删除表中的重复数据,可以采用多种策略,但通常涉及创建一个临时表来保存去重后的数据,然后用这个临时表覆盖原始表。这种方法可以避免直接修改原表带来的风险,确保操作的安全性。以下是一种具体的实现...

    Java调用oracle存储过程通过游标返回临时表

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    oracle temp表空间不足解决方法

    - 设置全局临时表:对于临时数据,可以使用全局临时表,它们在会话结束时自动删除,可以有效地管理Temp表空间。 7. **调整SGA参数**: - 调整 sort_area_size 和 sort_area_retained_size 参数,控制排序操作在...

Global site tag (gtag.js) - Google Analytics