- 浏览: 145321 次
- 性别:
- 来自: 河南
文章分类
最新评论
-
allenny:
刚开始编程时曾经用这种方式写过一个JSP,一千多行,嵌套十几层 ...
jsp页面使用java代码 -
javer:
"也就是不能出现方法的重构"
应该是叫方法 ...
Dwr学习笔记 -
yyqhs:
在jsp页面中直接编写java代码会使页面的可读性和可维护性变 ...
jsp页面使用java代码 -
bestxiaok:
set是向action中注入信息,get是从action中得到 ...
struts2.0技巧知识
1、前言
目前所有使用oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。
当然在oracle中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快,那么这个时候我考虑在oracle中创建“临时表”。
我对临时表的理解:在oracle中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。oracle的临时表创建之后基本不占用表空间,如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在oracle系统的临时表空间中(temp)。
2、临时表的创建
创建oracle临时表,可以有两种类型的临时表:会话级的临时表和事务级的临时表。
1)会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前session不退出的情况下,临时表中的数据就还存在,而当你退出当前session的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个session登陆的时候是看不到另外一个session中插入到临时表中的数据的。即两个不同的session所插入的数据是互不相干的。当某一个session退出之后临时表中的数据就被截断(truncate table,即数据清空)了。会话级的临时表创建方法:
create global temporary table table_name(col1 type1,col2 type2...)
on commit preserve rows;
举例:
create global temporary table student(stu_id number(5),class_id number
(5),stu_name varchar2(8),stu_memo varchar2(200)) on commit preserve rows ;
2)事务级临时表是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出session的时候,事务级的临时表也会被自动截断)。事务级临时表的创建方法:
create global temporary table table_name(col1 type1,col2 type2...)
on commit delete rows;
举例:
create global temporary table classes(class_id number(5),class_name varchar2
(8),class_memo varchar2(200)) on commit delete rows ;
3)、两种不通类型的临时表的区别:语法上,会话级临时表采用on commit preserve rows而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被截断。
3、例子:
1)、会话级(session关闭掉之后数据就没有了,当commit的时候则数据还在,当rollback的时候则数据也是一样被回滚):
insert into student(stu_id,class_id,stu_name,stu_memo) values(1,1,''张三'',''福建'');insert into student(stu_id,class_id,stu_name,stu_memo) values(2,1,''刘德华'',''福州'');insert into student(stu_id,class_id,stu_name,stu_memo) values(3,2,''s.h.e'',''厦门'');sql> select *from student ;
stu_id class_id stu_name stu_memo
1 1 张三 福建2 1 刘德华 福州3 2 s.h.e 厦门4 2 张惠妹 厦门
sql> commit;
commit complete
sql> select * from student ;
stu_id class_id stu_name stu_memo
1 1 张三 福建2 1 刘德华 福州3 2 s.h.e 厦门4 2 张惠妹 厦门
sql>insert into student(stu_id,class_id,stu_name,stu_memo) values(4,2,''张惠妹'',''厦门'');
1 row inserted
sql> select * from student ;
stu_id class_id stu_name stu_memo
1 1 张三 福建2 1 刘德华 福州3 2 s.h.e 厦门4 2 张惠妹 厦门4 2 张惠妹 厦门
sql> rollback ;
rollback complete
sql> select * from student ;
stu_id class_id stu_name stu_memo
1 1 张三 福建2 1 刘德华 福州3 2 s.h.e 厦门4 2 张惠妹 厦门
2)、事务级(commit之后就删除数据):
本例子将采用以下的数据:
insert into classes(class_id,class_name,class_memo) values(1,''计算
机'',''9608'');insert into classes(class_id,class_name,class_memo)
values(2,''经济信息'',''9602'');insert into classes
(class_id,class_name,class_memo) values(3,''经济信息'',''9603'');
在一个session中(比如sqlplus登陆)插入上面3条记录,然后再以另外一个session(用sqlplus再登陆一次)登陆,当你select * from classes;的时候,classes表是空的,而你再第一次登陆的sqlplus中select的时候可以查询到,这个时候你没有进行commit或者rollback之前你可以对刚才插入的3条记录进行update、delete等操作,当你进行commit或者rollback的时候,这个时候由于你的表是事务级的临时表,那么在插入数据的session也看不到数据了,这个时候数据就已经被截断了。
运行结果如下:
sql> insert into classes(class_id,class_name,class_memo)
values(1,''计算机'',''9608'');
1 row inserted
sql> insert into classes(class_id,class_name,class_memo)
values(2,''经济信息'',''9602'');
1 row inserted
sql> insert into classes(class_id,class_name,class_memo)
values(3,''经济信息'',''9603'');
1 row inserted
sql> update classes set class_memo ='''' where class_id=3 ;
1 row updated
sql> select * from classes ;
class_id class_name class_memo
1 计算机 96082 经济信息 96023 经济信息
sql> delete from classes where class_id=3 ;
1 row deleted
sql> select * from classes ;
class_id class_name class_memo
1 计算机 96082 经济信息 9602
sql> commit;
commit complete
sql> select *from classes ;
sql> 再重复插入一次,然后rollback。
sql> rollback ;
rollback complete
sql> select * from classes ;
4、临时表的应用
1)、当某一个sql语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。
2)、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。
5、注意事项:
1)、临时表的索引以及对表的修改、删除等和正常的表是一致的。
2)、oracle的临时表是oracle8i才支持的功能特性,如果你的oracle版本比较低的话,那么就可能没有办法用到了,如果你的oracle版本是8i的话,你还需要把$oracle_home/admin/$/pfile目录下的init<oracle_sid>.ora初始参数配置文件的compatible修改为compatible = "8.1.0",我的服务器上就是这样子配置的。当然也可以修改为compatible = "8.1.6"
以上是我在对大表进行优化的时候采用的一些手段,效果显著。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/newhappy2008/archive/2009/02/26/3940766.aspx
但是在实际的应用中,我们创建真是的表进行临时的存取! 每天自动跑一边存储过程,把数据放入到表中,然后前台进行显示!
发表评论
-
ORA-01031:权限不足
2010-08-24 16:00 18211. ORA-01031:权限不足 如果在Oracle ... -
Oralce 资料下载
2010-08-20 10:13 845Oracle10g文档到以下地址:1、到 [url][url] ... -
Oracle 程序流程
2010-08-18 15:52 8221.Case 的使用 --case 情况语 ... -
ORACLE 记录类型
2010-08-18 12:31 1729记录类型是用于处理单行多列数据的 1. %TYP ... -
Oracle游标学习二
2010-08-18 10:19 20011. -- 定义游标是 ... -
Oracle字符集
2010-08-10 17:01 1065经常有同事咨询oracle数据库字符集相关的问题, ... -
不同版本Oracle数据的导入导出
2010-08-10 16:27 12391.不同版本的oracle数据的导出-----》 ... -
oracle函数
2010-08-09 09:20 796做一个主键id,他为序列生成,而且其必须为7为数字,如果不太够 ... -
Oracle开发经验二
2010-07-28 17:53 9731.数据库中的数据表信 ... -
Oracle导出数据
2010-06-25 23:37 1192导出表数据 (yes/no): yes & ... -
SQL开发经验一
2010-06-20 10:15 842第一个sql: SELECT * FROM (SELE ... -
Oracle存储过程
2010-06-19 13:24 1270具体实例: CREATE OR REPLACE PROCED ... -
Oracle的游标学习
2010-06-18 21:22 1740DECLARE t_a VARCHAR2(50); CUR ... -
PL/SQL类型使用
2010-06-18 20:52 967--%Type的使用 names D401.D401_02% ... -
安装Oracle的客户端:连接Oracle服务器
2010-06-18 16:32 1867我们在软件开发过程中,必须要连接Oracle服务器,但是该服务 ... -
Oracle的jarclasses12.jar的重要性
2010-06-14 15:08 1797如果我们使用的是连接池,则项目使用的jar包是应用服务器中的! ... -
开发经验2
2010-06-02 13:42 751Oracle数据库,必须玩熟呀! 1。存储过程必须熟练书写, ... -
Oracle开发经验一
2010-05-28 12:04 864对于oracle的操作; 1。有时,我们为了实现某种功能,在 ... -
Oracle零碎知识
2010-05-20 12:17 8201.oracle中,对于date类型的列,不能直接插入字符 ...
相关推荐
Oracle中的临时表是一种特殊的数据结构,用于存储会话或事务期间的数据,这些数据仅对当前会话可见,并在特定条件下自动清除。Oracle提供两种类型的临时表:事务型和会话型。 事务型临时表在事务开始时创建,插入的...
本文将详细介绍Oracle临时表的创建方法、使用场景以及优缺点,帮助读者更好地理解和运用这一特性。 #### 二、Oracle临时表概述 Oracle临时表是一种特殊的表,用于存储临时数据,通常用于事务处理或特定会话期间的...
本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...
1、先将大表中满足条件的记录抽出来生成一张临时表 2、再将这较小的临时表与另一张较小的表进行关联查询 先不论思路是否值得商榷,这把临时表当成中转站的做法还是很值得肯定。 临时表本质上是一种...
Oracle 临时表空间满是指数据库中的临时表空间达到最大容量,无法继续存储临时数据,影响数据库的正常运行。本文将详细介绍解决 Oracle 临时表空间满的问题的步骤。 第一步:查看当前数据库的默认临时表空间 在解决...
首先,临时表空间是每个用户在Oracle数据库中进行操作时的默认工作区域。当用户进行如大型查询、创建索引或执行联接查询等涉及排序操作时,系统会自动在临时表空间中分配内存来存储中间结果。这是因为这些操作通常...
Oracle 临时表用法 Oracle 临时表是一种特殊的表结构,它可以在数据库中临时存储...但是,使用临时表时需要注意一些问题,例如避免在存储过程中创建临时表,避免在运行时创建临时表,以免导致数据库中的表数量增加。
4. 使用 shell 脚本来记录和分析临时表空间使用情况:可以编写 shell 脚本来记录使用临时表空间的 SQL 语句,并将其保存在特定表中。 5. SQL 语句优化:通过优化 SQL 语句,可以减少临时表空间的使用量,从而解决...
这种类型的临时表可以使用 ON COMMIT PRESERVE ROWS 说明,表示临时表是会话指定,当中断会话时(commit or rollback),Oracle 自动清除临时表中数据。 临时表的特点 1. 临时表的数据只对当前 Session 有效,每个...
在Oracle数据库管理中,临时表空间(Temporary Tablespace)的管理是一项非常重要的任务。合理的管理和优化临时表空间不仅可以提高系统的性能,还可以帮助解决空间不足等问题。本文将详细介绍如何通过SQL脚本进行...
### Oracle 临时表空间详解 ...总结而言,通过上述内容我们可以了解到Oracle数据库中临时表空间的基本概念、查询方法以及如何进行创建、修改和删除等操作。掌握这些知识点有助于更好地管理和优化数据库性能。
### Oracle中临时表的创建与使用 #### 一、引言 在Oracle数据库环境中,当处理大规模数据时,经常会遇到性能瓶颈的问题。特别是在那些数据量达到百万级别的大型系统中,如何高效地管理数据成为了关键所在。为了...
临时表可以在不同的数据库管理系统中使用,本文将对 MS SQLSERVER、Oracle 和 DB2 中的临时表进行介绍。 MS SQL SERVER 中的临时表 在 MS SQL SERVER 中,临时表是以井号 (#) 或数学符号 (##) 开头的表名。临时表...
以下将详细介绍如何在Oracle中创建表空间、临时表空间以及赋予用户对表空间的权限。 首先,我们来了解如何创建一个常规表空间: 1. **创建表空间**: 使用`CREATE TABLESPACE`语句来创建一个新的表空间。例如,...
理解Oracle临时表的概念及其工作原理对于优化应用程序的性能至关重要。合理使用临时表可以帮助提高数据处理的速度,同时减少不必要的资源消耗。无论是事务临时表还是会话临时表,都有各自的应用场景和限制。在实际...
oracle查找定位占用临时表空间较大的SQL语句方法,包括:(1)造成临时表空间暴涨的SQL还在运行中(2)造成临时表空间暴涨的SQL已经运行过了。
Oracle临时表是数据库管理系统中的一种特殊表,它主要用于在会话期间存储临时数据,供当前会话使用。这种表在会话结束时会被自动删除,不会永久保存在数据库中,因此,它们对于处理大量中间结果或者进行复杂计算的...
临时表在Oracle中用于在单个会话中存储临时数据,这些数据只对创建它们的会话可见,会话结束时,临时表及其数据都会被自动删除。 1. **创建临时表**:使用`CREATE GLOBAL TEMPORARY TABLE`语句创建临时表,例如: ...
在Oracle数据库系统中,临时表空间是用于存储临时数据的特定区域,这些数据通常由排序、聚合、JOIN等操作产生。当处理大量数据或者运行复杂SQL查询时,临时表空间的作用尤为关键。然而,如果不正确地管理和使用临时...
### Oracle特性临时表详解 #### 一、临时表概述 ...总之,Oracle中的临时表为开发者提供了强大的功能,可以在不影响永久数据的情况下高效地处理临时性数据。理解并合理利用临时表可以显著提升应用程序的性能和效率。