底辺SEの備忘録

スキル無しの底辺です。参考になりません。

レンジパーティション表の作成とパーティション・プルーニングの確認

概要

レンジパーティション表を作成し、実行計画を確認してパーティション・プルーニングが効いていることを確認したので備忘

レンジパーティション表の作成

SQL> CREATE TABLE sales
    ( prod_id       NUMBER(6)
    , cust_id       NUMBER
    , time_id       DATE
    , channel_id    CHAR(1)
    , promo_id      NUMBER(6)
    , quantity_sold NUMBER(3)
    , amount_sold   NUMBER(10,2)
    )
   PARTITION BY RANGE (time_id)
   ( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('2022-03-01','yyyy-mm-dd'))
   , PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('2022-04-01','yyyy-mm-dd'))
   , PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('2022-05-01','yyyy-mm-dd'))
   , PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('2022-06-01','yyyy-mm-dd'))
   );

表が作成されました。

実行計画を確認し、パーティション・プルーニングを確認

PstartとPstopが4となっているためパーティション・プルーニングが効いていると思われる

SQL> set autotrace on explain
SQL> select count(*) from sales where time_id = to_date('2022-05-30','YYYY-MM-DD');

  COUNT(*)
----------
         0


実行計画
----------------------------------------------------------
Plan hash value: 642363238

--------------------------------------------------------------------------------
-----------------

| Id  | Operation               | Name  | Rows  | Bytes | Cost (%CPU)| Time
| Pstart| Pstop |

--------------------------------------------------------------------------------
-----------------

|   0 | SELECT STATEMENT        |       |     1 |     9 |     2   (0)| 00:00:01
|       |       |

|   1 |  SORT AGGREGATE         |       |     1 |     9 |            |
|       |       |

|   2 |   PARTITION RANGE SINGLE|       |     1 |     9 |     2   (0)| 00:00:01
|     4 |     4 |

|*  3 |    TABLE ACCESS FULL    | SALES |     1 |     9 |     2   (0)| 00:00:01
|     4 |     4 |

--------------------------------------------------------------------------------
-----------------


Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("TIME_ID"=TO_DATE(' 2022-05-30 00:00:00', 'syyyy-mm-dd hh24:mi:ss'
))


Note
-----
   - dynamic statistics used: dynamic sampling (level=2)

SQL>

参考

docs.oracle.com

docs.oracle.com