知识大全 Oracle临时表 优化查询速度

Posted

篇首语:学者有自立之志,当拔出流俗,不可泛泛与世浮沉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle临时表 优化查询速度相关的知识,希望对你有一定的参考价值。

Oracle临时表 优化查询速度  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   前言    目前所有使用Oracle作为数据库支撑平台的应用 大部分数据量比较庞大的系统 即表的数据量一般情况下都是在百万级以上的数据量 当然在Oracle中创建分区是一种不错的选择 但是当你发现你的应用有多张表关联的时候 并且这些表大部分都是比较庞大 而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快 那么这个时候我考虑在Oracle中创建 临时表     我对临时表的理解 在Oracle中创建一张表 这个表不用于其他的什么功能 主要用于自己的软件系统一些特有功能才用的 而当你用完之后表中的数据就没用了 Oracle的临时表创建之后基本不占用表空间 如果你没有指定临时表(包括临时表的索引)存放的表空的时候 你插入到临时表的数据是存放在ORACLE系统的临时表空间中(TEMP)      临时表的创建    创建Oracle临时表 可以有两种类型的临时表 会话级的临时表和事务级的临时表      )会话级的临时表因为这这个临时表中的数据和你的当前会话有关系 当你当前SESSION不退出的情况下 临时表中的数据就还存在 而当你退出当前SESSION的时候 临时表中的数据就全部没有了 当然这个时候你如果以另外一个SESSION登陆的时候是看不到另外一个SESSION中插入到临时表中的数据的 即两个不同的SESSION所插入的数据是互不相干的 当某一个SESSION退出之后临时表中的数据就被截断(truncate table 即数据清空)了 会话级的临时表创建方法 Create Global Temporary Table Table_Name(Col Type Col Type ) On Commit Preserve Rows 举例create global temporary table Student(Stu_id Number( ) Class_id Number( ) Stu_Name Varchar ( ) Stu_Memo varchar ( )) on Commit Preserve Rows ;     )事务级临时表是指该临时表与事务相关 当进行事务提交或者事务回滚的时候 临时表中的数据将自行被截断 其他的内容和会话级的临时表的一致(包括退出SESSION的时候 事务级的临时表也会被自动截断) 事务级临时表的创建方法 Create Global Temporary Table Table_Name(Col Type Col Type ) On Commit Delete Rows 举例 create global temporary table Classes(Class_id Number( ) Class_Name Varchar ( ) Class_Memo varchar ( )) on Commit delete Rows ;     ) 两种不通类型的临时表的区别 语法上 会话级临时表采用on mit preserve rows而事务级则采用on mit delete rows 用法上 会话级别只有当会话结束临时表中的数据才会被截断 而且事务级临时表则不管是mit rollback或者是会话结束 临时表中的数据都将被截断      例子      ) 会话级(Session关闭掉之后数据就没有了 当Commit的时候则数据还在 当Rollback的时候则数据也是一样被回滚)     insert into student(stu_id class_id stu_name stu_memo) values( 张三 福建 );  insert into student(stu_id class_id stu_name stu_memo) values( 刘德华 福州 );  insert into student(stu_id class_id stu_name stu_memo) values( S H E 厦门 );    SQL> select *from student ;    STU_ID CLASS_ID STU_NAME STU_MEMO             张三   福建          刘德华  福州          S H E  厦门          张惠妹  厦门    SQL> mit;    Commit plete    SQL> select * from student ;    STU_ID CLASS_ID STU_NAME STU_MEMO             张三   福建          刘德华  福州          S H E  厦门          张惠妹  厦门    SQL>insert into student(stu_id class_id stu_name stu_memo) values( 张惠妹 厦门 );     row inserted    SQL> select * from student ;    STU_ID CLASS_ID STU_NAME STU_MEMO             张三   福建          刘德华  福州          S H E  厦门          张惠妹  厦门          张惠妹  厦门    SQL> rollback ;    Rollback plete    SQL> select * from student ;    STU_ID CLASS_ID STU_NAME STU_MEMO             张三   福建          刘德华  福州          S H E  厦门          张惠妹  厦门    SQL>     ) 事务级(Commit之后就删除数据) 本例子将采用以下的数据     insert into classes(Class_id Class_Name Class_Memo) values( 计算机 );  insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 );  insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 );    在一个SESSION中(比如SQLPLUS登陆)插入上面 条记录 然后再以另外一个SESSION(用SQLPLUS再登陆一次)登陆 当你select * from classes;的时候 classes表是空的 而你再第一次登陆的SQLPLUS中select的时候可以查询到 这个时候你没有进行mit或者rollback之前你可以对刚才插入的 条记录进行update delete等操作 当你进行mit或者rollback的时候 这个时候由于你的表是事务级的临时表 那么在插入数据的session也看不到数据了 这个时候数据就已经被截断了     运行结果如下     SQL> insert intoclasses(Class_id Class_Name Class_Memo) values( 计算机 );     row inserted    SQL> insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 );     row inserted    SQL> insert into classes(Class_id Class_Name Class_Memo) values( 经济信息 );     row inserted    SQL> update classes set class_memo = where class_id= ;     row updated    SQL> select * from classes ;    CLASS_ID CLASS_NAME CLASS_MEMO         计算机         经济信息        经济信息    SQL> delete from classes where class_id= ;     row deleted    SQL> select * from classes ;    CLASS_ID CLASS_NAME CLASS_MEMO         计算机         经济信息    SQL> mit;    Commit plete    SQL> select *from classes ;    CLASS_ID CLASS_NAME CLASS_MEMO       SQL>    再重复插入一次 然后rollback     SQL> Rollback ;    Rollback plete    SQL> select * from classes ;    CLASS_ID CLASS_NAME CLASS_MEMO       SQL>     临时表的应用     ) 当某一个SQL语句关联的表在 张及以上 并且和一些小表关联 可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中      ) 程序执行过程中可能需要存放一些临时的数据 这些数据在整个程序的会话过程中都需要用的等等      注意事项      ) 临时表的索引以及对表的修改 删除等和正常的表是一致的      ) Oracle的临时表是Oracle i才支持的功能特性 如果你的Oracle版本比较低的话 那么就可能没有办法用到了 如果你的Oracle版本是 i的话 你还需要把$ORACLE_HOME/admin/$ORACLE_SID/pfile目录下的init<ORACLE_SID> ora初始参数配置文件的patible修改为patible = 我的服务器上就是这样子配置的 当然也可以修改为patible =     以上是我在对大表进行优化的时候采用的一些手段 效果显著 cha138/Article/program/Oracle/201311/18437

相关参考

知识大全 Oracle临时表空间过大问题解决

Oracle临时表空间过大问题解决  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  查询数据库服务

知识大全 收缩临时表空间

Oracle性能优化:收缩临时表空间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当排序操作重

知识大全 oracle提高查询效率

  ()选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名FROM子句中写在最后的表(基础表drivingtable)将被最先处理在F

知识大全 Oracle使用hash分区优化分析函数查询

Oracle使用hash分区优化分析函数查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在O

知识大全 Oracle9i 的查询优化

Oracle9i的查询优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  执行概要  本文描述了

知识大全 ORACLE临时表空间的清理

ORACLE临时表空间的清理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ORACLE临时表空

知识大全 Oracle数据库索引优化技术关联查询性能调优

Oracle数据库索引优化技术关联查询性能调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数

知识大全 Oracle中的临时表用法汇总

Oracle中的临时表用法汇总  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!语法  在Oracle

知识大全 ORACLE临时表的应用

ORACLE临时表的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前言  目前所有使用Or

知识大全 Oracle10g临时表空间组

Oracle10g临时表空间组  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracleg引进