Decode360's Blog

          業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          Oracle臨時表
          ?
          ??? Oracle臨時表只需要創建一次,其結構總是有效的,每次使用后被清空的只是表里的數據。
          ?
          ??? Oracle的臨時表還保證了 多用戶操作的獨立性:對于使用同一張臨時表的不同用戶,ORACLE都會分配一個獨立的Temp Segment,這樣就避免了多個用戶在對同一張臨時表操作時發生交叉,從而保證了多個用戶操作的并發性和獨立性;
          ??? Oracle臨時表分為兩種,如下:
          ?

          ??? create global temporary table t66 (

          ???? ? ID number ,

          ???? ? NAME varchar2 ( 20 ),

          ????? OP_DATE date )

          ??? on commit delete rows ;--數據提交時清空表

          ?

          ??? create global temporary table t66 (

          ???? ? ID number ,

          ???? ? NAME varchar2 ( 20 ),

          ????? OP_DATE date )

          ??? on commit preserve rows ;--會話結束時清空表

          ?
          ?
          臨時表的存儲空間
          ?

          ??? select owner,table_name,tablespace_name from dba_tables where table_name= 'T66';

          ?
          ??? 由上面的查詢發現,創建的臨時表T66不在默認的表空間中儲存
          ?
          ??? SQL> alter tablespace temp offline;?????
          ?
          ??? 表空間已更改。
          ?
          ??? SQL>?insert?into?t66
          ?????? 2?select *?from t1;
          ?
          ??? insert?into?t66
          ??????????????? *
          ?
          ??? ERROR 位于第 1 行:
          ??? ORA-01542: 表空間'TEMP'脫機,無法在其中分配空間
          ?
          ??? 由上面的操作發現,表T66存儲于TEMP表空間中
          ?
          ?
          臨時表應用舉例
          ?
          ??? 1、臨時表不建立索引,所以如果數據量比較大或進行多次查詢時,不推薦使用
          ?
          ??? 2、數據處理比較復雜的時候使用臨時表快,反之視圖快點
          ?
          ??? 3、在僅僅查詢數據的時候建議用游標
          ?
          ??? 4、在分析數據時,經常用到臨時表來存放中間數據
          ?
          ??? 舉例: 對于一個電子商務類網站,不同消費者在網站上購物,就是一個獨立的SESSION,選購商品放進購物車中,最后將購物車中的商品進行結算。也就是說,必須在整個SESSION期間保存購物車中的信息。同時,還存在有些消費者,往往最終結賬時放棄購買商品。如果,直接將消費者選購信息存放在最終表(PERMANENT)中,必然對最終表造成非常大的壓力。
          ??? 因此,對于這種案例就可以采用創建臨時表 (ON COMMIT PRESERVE ROWS) 的方法來解決。數據只在 SESSION 期間有效,對于結算成功的有效數據,轉移到最終表中后,ORACLE自動TRUNCATE 臨時數據;對于放棄結算的數據,ORACLE 同樣自動進行 TRUNCATE ,而無須編碼控制,并且最終表只處理有效訂單,減輕了頻繁的DML的壓力。
          ?
          臨時表使用索引問題
          ?
          ??? 總體來說,在臨時表上建立索引經常會被忽略不使用,所以盡量還是不要加索引,太大的數據量就不要用臨時表了。
          ?
          ??? 具體的索引使用情況參見文章 http://bbs.bitscn.com/69514
          ?
          ?
          ?
          ?




          -The End-

          posted on 2008-10-15 20:01 decode360-3 閱讀(1247) 評論(0)  編輯  收藏 所屬分類: Oracle
          主站蜘蛛池模板: 乌鲁木齐县| 澄江县| 宽甸| 锡林浩特市| 吉安县| 灌云县| 长汀县| 丹东市| 璧山县| 清丰县| 蒲城县| 张家港市| 宜宾市| 鄯善县| 涿鹿县| 崇明县| 乌拉特后旗| 固镇县| 博白县| 永城市| 麻城市| 宜都市| 义马市| 泰顺县| 肃宁县| 巩留县| 北川| 治县。| 友谊县| 新和县| 松滋市| 宁武县| 班戈县| 玛沁县| 连城县| 桃源县| 通渭县| 孙吴县| 青岛市| 吉首市| 正安县|