2つの新しいパーティションを作成し、分割されるパーティションの行を2つの新しいパーティションに再分散することで、Oracle DatabaseにSPLIT
PARTITION
操作が実装されます。この操作には時間がかかります。分割対象のパーティションのすべての行をスキャンしてから、新しいパーティションに1行ずつ挿入する必要があるためです。さらに、UPDATE
INDEXES
句を使用しない場合、ローカルおよびグローバル索引も再作成する必要があります。
分割操作後、分割されたパーティションのすべての行が新しいパーティションの一方に含まれ、もう一方には行がない場合があります。これは、表の最初のパーティションを分割した場合によく起こります。このような状況はデータベースにより検出され、分割操作が最適化されます。この最適化により、パーティションの追加操作のように動作する分割操作が高速になります。
具体的には、次の条件をすべて満たしている場合に、SPLIT
PARTITION
操作がデータベースにより最適化および高速化されます。
結果の2つのパーティションの一方が空である必要があります。
空ではない結果のパーティションの記憶域特性が、分割されたパーティションの記憶域特性と同一である必要があります。具体的には、次のようになります。
分割元のパーティションがコンポジットの場合、空ではない新しい結果のパーティションの各サブパーティションの記憶域特性は、分割元のパーティションのサブパーティションの記憶域特性と同一である必要があります。
分割元のパーティションにLOB
列が含まれる場合、空ではない新しい結果のパーティションの各LOB
(サブ)パーティションの記憶域特性は、分割元のパーティションのLOB
(サブ)パーティションの記憶域特性と同一である必要があります。
オーバーフローが含まれる索引構成表のパーティションを分割する場合、空ではない新しい結果のパーティションの各オーバーフロー(サブ)パーティションの記憶域特性は、分割元のパーティションのオーバーフロー(サブ)パーティションの記憶域特性と同一である必要があります。
マッピング表が含まれる索引構成表のパーティションを分割する場合、空ではない新しい結果のパーティションの各マッピング表(サブ)パーティションの記憶域特性は、分割元のパーティションのマッピング表(サブ)パーティションの記憶域特性と同一である必要があります。
分割後にこれらの条件に一致していれば、UPDATE
INDEXES
句を指定しなかった場合でも、グローバル索引はすべて使用可能なままです。分割前に使用可能であった場合、結果のパーティションの両方に関連付けられているローカル索引(サブ)パーティションは使用可能なままです。空ではない結果のパーティションに対応するローカル索引(サブ)パーティションは、分割されたパーティションのローカル索引(サブ)パーティションと同一になります。SPLIT
SUBPARTITION
操作にも、同じ最適化が行われます。