<轉>oracle效能調整讀書筆記(2)
第三章 SQL 調整 3. 穩定執行計劃 xV&c ) l>} 第三章 SQL 調整 5.索引 x0||' 0I0 |l Mc6C >)ed ha*W] 索引 @ ;7Ht Z` ORACLE 9i 中有六種索引:二叉樹索引,壓縮的二叉樹索引,點陣圖索引,基於函式的索引,反向索引,索引組織表; +c tJV> ,!QtVi A7 二叉樹索引 b !T-{Ns6 · 二叉樹索引將索引欄位值和ROWID一起儲存樹狀結構中,適用於只存取表中總記錄的5%以下的查詢; \u*[mrX_B: · 出現在SQL的WHERE條件中,集勢高的欄位適於當作索引欄位; ;v 5Jps2^] · 隨著基表資料的不斷增加,索引塊會不斷分裂以保持二叉樹的平衡,樹的層次(從根結點訪問到葉結點要經過的資料塊數,DBA_INDEXES.BLEVEL)也不斷增加,層次大於4的索引宜重建; \ t]_UNGyW · 基表資料刪除時,索引項也隨之刪除,但葉塊上的空間並不能被重用,除非該葉塊上所有的索引項都被刪除,當刪除項佔所有項超過20%時,這個索引也需要重建(ANALYZE INDEX … VALIDATE STRUCTURE;分析索引後檢視index_stats.del_lf_rows_len 和 index_stats.lf_rows_len 可以知道被刪除的索引項佔用的空間和所有葉行佔用的空間); W?ge lu ] · 有三種重建索引的方法: iCy $ rC 1. 先刪除再重建;這種方法耗費最多的資源,是早期版本的唯一方法; q> m [vvt" 2. ALTER INDEX … REBUILD; 這種方法高效快速,但需要額外的磁碟空間;用這種方法可以指定許多選項如ONLINE(線上重建可減少鎖爭用), TABLESPACE(移動段到其它表空間), COMPUTE STATISTICS(統計), PARALLEL(並行), NOLOGGING(儘可能少地產生日誌); {j %7/T{ 3. ALTER INDEX … COALESCE; 這種方法快速,無需額外空間,鎖爭用也少,缺點是選項少。 ( H -kW T @ ; Xa&* 壓縮的二叉樹索引 vP ^ V 3 · 壓縮的二叉樹索引對重複的索引鍵值只儲存一次,後跟所有的有這個鍵值行的ROWID; aK-- D2@}i · 有兩種方法建立: s,~g| I\ 1. CREATE INDEX … COMPRESS; L/)Q 1Mm 2. 先建立普通索引,再更改:CREATE INDEX …; ALTER INDEX … COMPRESS; J#?z/3 v( BO'7c 1FU 點陣圖索引 Sw` +4 4 · 點陣圖索引適於建立在資料相對穩定的表的低集勢欄位上; s/ Q8(sF5 · 點陣圖索引針對每一個鍵值建立一個二進位制點陣圖,點陣圖中的每位對應表中的一行,1表示這一行是當前鍵值,0表示這一行為其它鍵值; KdC '#$ · 與二叉樹索引相比,點陣圖索引佔的空間很少,如果WHERE條件中出現同一表的多個點陣圖索引欄位時,無論是AND或是OR操作,都能用點陣圖合併操作快速地定位到ROWID; j>#ywh*A · 當基表上有DML操作時,整個點陣圖都會被鎖住,但是,每一個DML操作,點陣圖只需更新一次; =2 1m| 8c · 相關引數: !wH' dsriD 1. SORT_AREA_SIZE 建立索引排序點陣圖欄位和ROWID時會用到; _J>!K'Dz 2. PGA_AGGREGATE_TARGET 建立點陣圖索引以及點陣圖合併時會用到; z~# d@c \ 3. CREATE_BITMAP_AREA_SIZE, BITMAP_MERGE_AREA_SIZE 這是8i的兩個與點陣圖建立和合並有關引數,在9i建議不再使用。 ?7TuE!!M KU ;J2Kt 基於函式的索引 o T "7O 5v · 當欄位以函式表示式的形式出現在WHERE條件中,基於這些欄位的索引不會被優化器用到,除非是基於這些欄位的函式索引; = ,Z5F`d 4 · 要建立基於函式的索引需要QUERY REWRITE 或 GLOBAL QUERY REWRITE系統許可權,有CREATE ANY INDEX許可權是不行的; >9t+lr1 · 要想優化器使用基於函式的索引,OPTIMIZER_MODE必須設成某種CBO模式,QUERY_REWRITE_ENABLED須設成TRUE(這點從試驗中無法證明,設成FALSE似乎也能用到函式索引)。 Q$ A;Fk}- l fqsoIn; 反向索引 Nh1 , w · 反向索引是建立在索引欄位值的反向值上的,可以使相臨的記錄在索引段裡變得離散,可以減少某些DML操作引發的塊競爭; X 1}U · 反向索引多建立在用序列號生成的欄位上,這樣的欄位在普通索引中容易形成更多的層(設計過一些試驗,但一直未觀察到這種現象); / @0 · 有兩種產生方法:CREATE INDEX … REVERSE; ALTER INDEX … REVERSE; lV gin5 4Q · 反向索引適於WHERE中的等於或不等於的比較,對於範圍查詢(>,< between)是無能為力的。 6NG QU%H d Og?P5&C"9D 索引組織表 J/\^ 3r CB · 前面五種索引的基表資料儲存是隨機的,這種表稱為堆表; spT I hZ · 索引組織表的資料儲存在二叉樹索引中,所以,如果通過主鍵來存取資料,索引組織表能更快地返回資料,因為不需要先取索引塊再取資料塊,可以直接從索引中返回資料; \{ff7_mLo · 建立索引組織表時必須指定一個主鍵欄位,用這個作為索引; C W?R7A/ · 索引組織表上不能建唯一約束,也不能將索引組織表建立在簇上面; )V9 wU1. · 索引組織表的語法要點: o Fp4* Ø ORGANIZATION INDEX 指明當前表是索引組織表; z W* Z Ø PCTTHRESHOD 後跟一個0到50的數,預設值為50,指明容納一行資料可用使塊空間的百分比; P F0AU T Ø INCLUDING 後跟一個欄位,如果資料行的長度超過了PCTTHRESHOLD指定的可用空間,從這個欄位之後將資料行分為兩段,後面的部分放入溢位段中; rM)#}eZ K! Ø OVERFLOW TABLESPACE 指定溢位段所在的表空間; DVw 04ay% Ø MAPPING TABLE 當在索引組織表上建立點陣圖索引時建立關聯的對映表;堆表點陣圖索引的每個位對應到表的一個ROWID,索引組織表的ROWID會隨著索引的分裂而發生改變,如果和堆表一樣處理,點陣圖索引很容易就失效或者維護成本很高,對映表就是為解決這個問題而引入的,對映表存放索引組織表的ROWID和邏輯行間的對應關係,索引點陣圖中的位對應到邏輯行;dba_indexes.pct_direct_access可以用來指示對映表GUESS的效率,這個值大於30時推薦重建點陣圖索引;一個索引組織表只有一個對映表。 %( #kJZ · 通過dba_tables.iot_name, dba_tables.iot_type 可以檢視到索引組織表的溢位表段,對映表段; ] ".SW5b_ · 索引組織表的相關段的段名都是由系統生成的,這些段名的共同特性是SYS_IOT_XXX_YYY, XXX in (TOP 索引段, OVER 溢位表段, MAP 對映表段),YYY是索引組織表的OBJECT_ID。 0E/ 16@ 6= oC|']r 6 標識未使用過的索引 il kN 3J · 索引建立後是否使用是由優化器來控制的,某些索引可能不會使用到,這樣的索引不僅加重了DML操作的負擔,也佔用空間;可以用下面的方法找出這樣的索引,然後刪除; s d XZsQ w Ø 找出某個或某些被懷疑的索引; Kd Lj 1 T Ø ALTER INDEX index_name MONITORING USAGE; 9bu 1A x1M Ø 在資料庫經歷一定時間的活動後再執行: ALTER INDEX index_name NOMONITORING USAGE; ] u jXPK=t Ø 查詢v$object_usage.index_name, v$object_usage.used,可以得知被監控的索引在這段時間內是否被使用到。 S= g E'"LT Mby V_A`r_ }W5 ~ 89" 第三章 SQL 調整 6.分割槽 f- ~ ] ~ A,(D - -\V;Gw8mD · 分割槽表是將大表的資料分成稱為分割槽的許多小的子集,9i提供四種分割槽方法:範圍分割槽,列表分割槽,雜湊分割槽和混合分割槽; "rR$2`v" · 範圍分割槽是根椐分割槽鍵的不同取值範圍來劃分子集的,關鍵字RANGE, VALUES LESS THAN; dW#?{n- H< · 列表分割槽是根椐分割槽鍵的一些離散的取值來劃分子集的,關鍵字LIST, VALUES; 9[Xe|5?c · 雜湊分割槽是應用雜湊演算法將分割槽鍵對應到某個子集中去,關鍵字HASH, PARTITIONS; 'Ad|* ~ · 混合分割槽只能有兩層,第一層是範圍分割槽,第二層可以是列表分割槽或者雜湊分割槽; dyu T-. 2 · 範圍分割槽和列表分割槽中,如果插入記錄的分割槽鍵沒有對應的容納分割槽,會產生ORA-14400; GF gh{ '| · update操作如果會使記錄從一個分割槽遷移到另一個分割槽,且分割槽表的ROW MOVEMENT屬性是DISABLE,會產ORA-14402; M F s W · 分割槽表上的索引有兩大類:普通的二叉樹索引,分割槽索引,下面講到的都是分割槽索引: 3Qu Ft~@ @ · 按索引分割槽和表分割槽間的對應關係可以分為區域性索引和全域性索引; UszR. Z Ø 區域性索引的索引分割槽和表分割槽間是一一對應的,全域性索引則相反; BnIZ+ fg= Ø 區域性索引的分割槽方法可以用上面提到四種的任何一種,全域性索引的分割槽方法只有範圍分割槽(而且最高的分割槽必須用MAXVALUE來定義); psB9~EU&Q Ø ORACLE自動維護區域性索引的分割槽,當表分割槽被合併,分裂或刪除時,關聯的索引分割槽也會被合併,分裂或刪除;對分割槽表執行管理操作時會使其上的全域性索引失效; eLyaTOZadu Ø 建在分割槽表的點陣圖索引必須是區域性分割槽索引; r+;AE N48 Ø ORACLE推薦儘可能地使用區域性索引; F+::UWK A · 按索引欄位和分割槽鍵間的關係分為字首索引和非字首索引; H & =3rkX Ø 字首索引最前面的欄位是分割槽鍵欄位,非字首索引相反; KfMaV U=4P · 在這兩種分類方法的四種組合中,只有三種有效(區域性字首索引,區域性非字首索引,全域性字首索引),不存在全域性非字首索引; j GKasI` · 分割槽表給CBO帶來很多選項,如分割槽排除,並行分割槽連線等。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/119501/viewspace-609376/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Tuning (Oracle 效能調整)的一些總結(轉)2Oracle
- 程式碼整潔之道--讀書筆記(2)筆記
- One-on-One Oracle閱讀筆記2(轉)Oracle筆記
- 讀書筆記2筆記
- Oracle Tuning (Oracle 效能調整)的一些總結(轉)Oracle
- 《CSS重構:樣式表效能調優》讀書筆記CSS筆記
- orcle效能調整(轉)
- 《高效能JavaScript》讀書筆記JavaScript筆記
- 讀書筆記(2)《微精通》筆記
- 程式碼整潔之道--讀書筆記(13)筆記
- 程式碼整潔之道--讀書筆記(14)筆記
- 程式碼整潔之道--讀書筆記(12)筆記
- 程式碼整潔之道--讀書筆記(10)筆記
- 程式碼整潔之道--讀書筆記(6)筆記
- 程式碼整潔之道--讀書筆記(5)筆記
- 程式碼整潔之道--讀書筆記(4)筆記
- 程式碼整潔之道--讀書筆記(7)筆記
- 程式碼整潔之道--讀書筆記(11)筆記
- 程式碼整潔之道--讀書筆記(9)筆記
- 程式碼整潔之道--讀書筆記(1)筆記
- 程式碼整潔之道--讀書筆記(3)筆記
- 讀書筆記-程式碼整潔之道(一)筆記
- 【前端效能優化】高效能JavaScript讀書筆記前端優化JavaScript筆記
- 《HTTP/2 基礎教程》 讀書筆記HTTP筆記
- 讀書筆記筆記
- 《讀書與做人》讀書筆記筆記
- 《程式碼大全2》讀書筆記2(5-6)筆記
- 讀書筆記2-記憶體優化篇筆記記憶體優化
- 高效能JavaScript 重排與重繪 讀書筆記JavaScript筆記
- postgres 讀書筆記筆記
- 讀書筆記3筆記
- Cucumber讀書筆記筆記
- webpackDemo讀書筆記Web筆記
- Vue讀書筆記Vue筆記
- 散文讀書筆記筆記
- HTTP 讀書筆記HTTP筆記
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- fluent python 讀書筆記 2–Python的序列型別2Python筆記型別
- 程式碼整潔之道讀書記