DBAtlas · データベース運用アトラス

パーティションプルーニングを検証

Oracle

EXPLAIN PLAN FOR
SELECT * FROM sale WHERE sale_date = DATE '2026-01-15';
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
-- Look for 'PARTITION RANGE ITERATOR/SINGLE' and the Pstart/Pstop columns in the plan.

Pstart/Pstop は関連するパーティションのみが読まれていることを示す(KEY ではなく数値が理想)。パーティションキーに関数/暗黙の型変換を適用するとプルーニングが妨げられる。

PostgreSQL

SET enable_partition_pruning = on;
EXPLAIN (ANALYZE)
SELECT * FROM sale WHERE sale_date = DATE '2026-01-15';
-- Verify in the plan that only the relevant partition (child table) is scanned.

enable_partition_pruning が有効な場合、一致するパーティションのみが実行計画に表示され、その他は 'never executed' と表示される。定数値は計画時に、パラメータは実行時にプルーニングされる。

MySQL

-- Show which partitions are scanned:
EXPLAIN SELECT * FROM sale WHERE sale_date = '2026-01-15';
-- 5.7 and earlier: EXPLAIN PARTITIONS SELECT ... (removed in 8.0)

MySQL 5.7+ では通常の EXPLAIN 出力の 'partitions' 列がスキャン対象のパーティションを一覧表示する(EXPLAIN PARTITIONS 構文は 8.0 で削除)。関連するパーティションのみが表示されるはず。すべてのパーティションが表示される場合はプルーニングが行われていない。

SQL Server

-- Find which partition a value falls into:
SELECT $PARTITION.pf_sale_date('2026-01-15') AS partition_no;
-- Examine 'Actual Partition Count' and 'Actual Partitions Accessed' in the actual plan.

$PARTITION 関数は値のパーティション番号を返す。実際の実行計画でアクセスされたパーティション数が 1 に近ければプルーニングが有効。すべてのパーティションがスキャンされている場合は述語が一致していない。

MongoDB

// Targeted query using the shard key in a sharded cluster:
db.sale.find({ shop_id: 42 }).explain("executionStats")
// In explain, only the relevant shard should appear under 'shards'.

クエリにシャードキーが含まれていれば、mongos は関連するシャードにのみルーティングする(targeted)。そうでなければすべてのシャードに展開される(scatter-gather)。explain の出力でアクセスされたシャードを確認する。

Redis

# Not applicable: there is no table/partition concept.

データは Cluster のハッシュスロットで分散される。クエリのプルーニングではなく、キーで直接アクセスする。

Elasticsearch

# Route to the relevant shard with routing:
GET <index>/_search?routing=customer42
{ "query": { "term": { "customer_id": 42 } } }
# Query only the relevant indices with a time-based index pattern:
GET sale-2026-01/_search

カスタム routing はクエリを単一のシャードに絞り込む(プルーニングに類似)。時系列データでは、日付パターンのインデックス名(sale-2026-01)により関連するインデックスのみが検索される。ワイルドカードではなく狭いパターンを使用する。

DBAtlas で開く →