1 、前言 今朝所有使用 Oracle 作为数据库支撑平台的应用,年夜部门数据量斗劲复杂的系统,即表的数据量一般情形下都是在百万级以上的数据量。
/ f' N5 p, R5 E5 ^7 v 当然在 Oracle 中建树分区是一种不错的选择,可是当你发现你的应用有多张表联系关系的时辰,而且这些表年夜部门都是斗劲复杂,而你联系关系的时辰发现其中的某一张或者某几张表联系关系之后获得的结不美观集很是小而且发芽获得这个结不美观集的速度很是快,那么这个时辰我考虑在 Oracle 中建树“姑且表”。2 S5 Q; Z1 d7 V$ W0 |9 m/ x
我对姑且表的理解:在 Oracle 中建树一张表,这个表不用于其他的什么功能,首要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。 Oracle 的姑且表建树之后根基不占用表空间,如不美观你没有指定姑且表(搜罗姑且表的索引)存放的表空的时辰,你插入到姑且表的数据是存放在 ORACLE 系统的姑且表空间中( TEMP )。2 j7 J4 a# Q) U; A0 T* x
2 、姑且表的建树9 g9 B' w1 b$ p; r/ }* F" o/ {
建树Oracle 姑且表,可以有两种类型的姑且表:
+ Q8 w8 b1 v0 _4 ~ 会话级的姑且表
- {$ t7 y9 K* j 事务级的姑且表 。; I4 l6 j: }, P4 H* g7 i
1) 会话级的姑且表因为这这个姑且表中的数据和你的当前会话有关系,当你当前SESSION 不退出的情形下,姑且表中的数据就还存在,而当你退出当前SESSION 的时辰,姑且表中的数据就全数没有了,当然这个时辰你如不美观以此吐矣闽SESSION 上岸的时辰是看不到此吐矣闽SESSION 中插入到姑且表中的数据的。即两个分歧的SESSION 所插入的数据是互不相关的。当某一个SESSION 退出之后姑且表中的数据就被截断(truncate table ,即数据清空)了。会话级的姑且表建树体例:
3 {8 i6 C. z9 c Create Global Temporary Table Table_Name
, w- R6 ]) A u+ p (Col1 Type1,Col2 Type2...) On Commit Preserve Rows ;# S" [% `" x, s, e
举例:
& n+ g8 s1 z" B, [* q- q create global temporary table Student
" [, s; \; U9 z" H: ? (Stu_id Number(5),
2 X4 h. {* n1 g Class_id Number(5),
/ l8 W% l& J7 X7 R Stu_Name Varchar2(8),
( j5 E8 |8 m% ^+ ~6 i4 T6 ]8 b: v Stu_Memo varchar2(200)) on Commit Preserve Rows ;" ^) f" i* ^' t* Q
2) 事务级姑且表是指该姑且表与事务相关,当进行事务提交或者事务回滚的时辰,姑且表中的数据将自行被截断,其他的内容和会话级的姑且表的一致(搜罗退出SESSION 的时辰,事务级的姑且表也会被自动截断)。事务级姑且表的建树体例:
# C6 Y& c/ y; d Create Global Temporary Table Table_Name
2 Y2 W5 w a% t5 E/ ^6 K* k( Q, y (Col1 Type1,Col2 Type2...) On Commit Delete Rows ;
) X0 _; y3 q( a7 V% }3 @# v4 M 举例:
/ g, p. ~* j- `' f0 d8 i) l create global temporary table Classes
W: ]% i- O- R" i2 J$ i/ j (Class_id Number(5),# F9 x9 L& j! w! S/ z! g; l
Class_Name Varchar2(8),
1 @$ g# t' _' P6 x2 J
; K! f+ O# o) k% R; K' ?( ~ Class_Memo varchar2(200)) on Commit delete Rows ; |