数値(parameterinstanceid)値で範囲が分割されたテーブルがあります。同じ列のmax+1値を選択したい。parameterinstanceidにグローバル非パーティションインデックスがある。
select /*+ parallel(a,32,8) */ max(parameterinstanceid) +1 from parameterinstance a;
Explain Planを確認すると、テーブルでINDEX FULL SCAN(MIN / MAX)を実行していることがわかります。最初にmaxパーティションをチェックインして、データが含まれていない場合は、次のパーティションをdescの順序でチェックインします。これを行うためのプロシージャを記述できますが、簡単なクエリがあるかどうかを知りたいです。 http://www.oramoss.com/blog/2009/06/no-pruning-for-minmax-of-partition-key.html ..未解決の問題のようです。
編集 :
パーティション名はPI_P01、PI_P02、... PI_P10、PI_PMAXVALUEです。
説明計画は次のとおりです。
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2808487136
-----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 34 (0)| 00:00:01 | | |
| 1 | SORT AGGREGATE | | 1 | 8 | | | | |
| 2 | PARTITION RANGE ALL | | 1 | 8 | 34 (0)| 00:00:01 | 1 | 11 |
| 3 | INDEX FULL SCAN (MIN/MAX)| PI_PK | 1 | 8 | 34 (0)| 00:00:01 | 1 | 11 |
-----------------------------------------------------------------------------------------------------
およびテーブル構造体:
Name Null? Type
------------------------------ -------- -----------------
PARAMETERINSTANCEID NOT NULL NUMBER
PARAMINSTANCE2PARAMSETVERSION NOT NULL NUMBER
PARAMINSTANCE2PARAMDEFINITION NOT NULL NUMBER
PARAMINSTANCE2PARENTPARAM NUMBER
SEQUENCE NUMBER
X_CTCV_CONV_ID VARCHAR2(50 CHAR)
X_CONV_RUN_NO NUMBER
およびテーブルのインデックス:
INDEX_NAME POSITION COLUMN_NAME
------------------------------ -------- -----------------------------
PI_UK 1 PARAMINSTANCE2PARAMSETVERSION
PI_UK 2 PARAMINSTANCE2PARAMDEFINITION
PI_PK 1 PARAMETERINSTANCEID
PI_PAD_FK_I 1 PARAMINSTANCE2PARAMDEFINITION
PI_PI_FK_I 1 PARAMINSTANCE2PARENTPARAM