パーティション・プルーニングを理解する
このサイトがわかりやすいです。以下一部抜粋。
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05787-01/part_avail.htm#CACGFIGJ
①パーティションプルーニングとは
Oracle Databaseでは、実際のSQL文に応じて静的プルーニングまたは動的プルーニングのいずれかが実行されます。静的プルーニングは、事前にアクセスしたパーティションの情報に基づいてコンパイル時に行われます。動的プルーニングは、SQL文でアクセスされる正確なパーティションが事前にわからないため実行時に行われます。静的プルーニングのシナリオ例としては、パーティション・キー列の定数リテラルに関するWHERE条件を含むSQL文があります。動的プルーニングの例は、WHERE条件での演算子または関数の使用です。
②いつパーティションプルーニングが効くか
Oracle Databaseでパーティション・プルーニングが行われるのは、レンジ・パーティション化列またはリスト・パーティション化列で、範囲述語、LIKE述語、等価述語、INリスト述語を使用したとき、またハッシュ・パーティション化列で等価述語およびINリスト述語を使用したときです。
③パーティションプルーニングが効いている場合
パーティション・プルーニング情報は、計画列PSTART(PARTITION_START)およびPSTOP(PARTITION_STOP)に反映されます。
例1:静的パーティションプルーニング
- -
Id Operation Name Rows Bytes Cost (%CPU) Time Pstart Pstop
- -
0 SELECT STATEMENT 673 19517 27 (8) 00:00:01
1 PARTITION RANGE SINGLE 673 19517 27 (8) 00:00:01 17 17
2 TABLE ACCESS FULL SALES 673 19517 27 (8) 00:00:01 17 17
- -
例2:動的パーティションプルーニング
- -
Id Operation Name Rows Bytes Cost (%CPU) Time Pstart Pstop
- -
0 SELECT STATEMENT 2517 72993 292 (0) 00:00:04
1 INLIST ITERATOR
2 PARTITION RANGE ITERATOR 2517 72993 292 (0) 00:00:04 KEY(I) KEY(I)
3 TABLE ACCESS BY LOCAL INDEX ROWID SALES 2517 72993 292 (0) 00:00:04 KEY(I) KEY(I)
4 BITMAP CONVERSION TO ROWIDS
5 BITMAP INDEX SINGLE VALUE SALES_TIME_BIX KEY(I) KEY(I)
- -