「S3 開発/SQL - S3.1 SQL コマンドド(テーブルスペース)」からの出題です。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2022年6月29日
パーティショニングは大きなテーブルを小さなテーブル(パーティション)に分割する手法です。例えば売上データを売上の日付によって月ごとのパーティションに分割する、といったことをします。月ごとだと、例えば3年分のデータは36個のパーティションに分割されて格納されます。
パーティショニングによって性能が向上するのは、その特定のパーティションにのみアクセスする場合です。大きなテーブルの一部だけに集中的にアクセスするような形式にでき、さらにその領域がデータベースサーバのメモリ内に収まるような状況なら、劇的に性能が向上する可能性があります。
小さなテーブルに分割されるとは言え、入っているデータの総量は変わりませんから、テーブルが必要とするディスク容量は変わりません。
インデックスはパーティションごとに作成されるため、インデックスの個数は増えますが、個々のインデックスファイルのサイズは小さくなります。また問い合わせの条件によっては特定のインデックスにのみアクセスすれば良いので、インデックスがメモリ内に収まり、性能が大きく向上する可能性があります。
例えば2ヶ月前の売上データを検索して集計する、という場合、パーティション分割されていなければ、インデックスを使ってテーブル全体に分散しているデータを検索することになるでしょう。月ごとのデータにパーティショニングされている場合、該当のデータは特定のパーティションにだけあることがわかっていますから、特に検索されるデータ件数が多い場合、インデックスを使わずに、そのパーティションのデータを全件走査する方が速い、ということがあります。
1ヶ月分のデータをすべて削除する、という場合、テーブル全体に分散している個々のデータを削除する代わりに、パーティション1個を丸ごとDROPすれば済むので、この操作は大幅に高速化されます。
パーティション分割に使っているキー列(例えば売上日付)をUPDATEで更新すると、そのデータが別のパーティションに移動することがあります。内部的には移動元のパーティションへのDELETEと移動先のパーティションへのINSERTが行われるだけのことですので、パーティションを使っていない場合に比べて速くなることはありません。
従って正解はB、C、Dです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.