Oracle 高效的分割槽消除

分割槽表最實用的特性

1。高效的分割槽消除

分割槽表存在的最大意義在於,可以有效地做到分割槽消除

分割槽表其實是將一個大物件分成了多個小物件

Oracle 高效的分割槽消除

觀察範圍分割槽表的分割槽消除帶來的效能優勢

Oracle 高效的分割槽消除

普通表無法用deal_date條件進行分割槽消除

同樣的語句查詢有相同記錄的表,分割槽表的查詢代價僅為111,邏輯讀僅為566,而普通表的代價卻為1298,邏輯讀為5990,效能方面有著天壤之別。差別如此之大,應該是和分割槽表查詢只遍歷了13個分割槽中的一個有關。在分割槽表查詢的執行計劃中p_start和p_stop都標記上9,表示只遍歷了第9個分割槽。這樣避開了對其餘12個分割槽的查詢,就是分割槽消除

組合分割槽

Oracle 高效的分割槽消除

觀察範圍-列表分割槽表的分割槽條件的分割槽消除

測試針對普通表的增加了 area_code 條件的相同 SQL 語句:

Oracle 高效的分割槽消除

普通表無法用area_code條件進行分割槽消除

組合分割槽導致範圍定位得更小了,只產生了60個邏輯讀,比之前的566個邏輯讀還要少。至於普通表的查詢,因為始終是全表掃描,所以邏輯讀依然和之前差不多,達到5931個。

組合分割槽雖然只有60個邏輯讀,比之前範圍分割槽的566個要少得多,但是代價卻差不多,甚至還略大於之前的,因為分割槽數過多,呼叫有開銷。在試驗中,表的總記錄數不過10萬,全表掃描開銷都不是太大,這時Oracle內部呼叫的開銷影響就相對較大。如果表是一張超級大表,比如有上億條記錄,那這些開銷相比而言就可以忽略不計了,

分割槽表應用在大表上更合適,至少要大於100萬條記錄的表方可考慮。