徹底比較!! Oracle & PostgreSQL 6

テスト其の弐 〜 データの検索

テスト其の弐 〜 データの検索

   今回はデータの検索速度を測定してみます。データは前回のテスト其の壱で使用した表をそのまま検索データとして使用します(データは10万件)。


インデックスなしの全件検索での集計

   全件検索時のパフォーマンスを測定します。インデックスがない状態でテストデータ中の数値列(給与)の集計(SUM)を実行し、その速度を測定します。

   インデックスを作成しない状態でSUM関数による集計を行うため、全データへアクセスする必要があります。処理は単独のセッションで行い、 SQL*Plus、psqlで実行します。データベースを起動した直後の状態と、数回検索を行なった後の状態のそれぞれを測定してみます。つまり、データ がキャッシュされていない場合とキャッシュされている場合の測定です。


実行したSQL文
select sum(給与) from 社員表;
インデックスなしの場合の集計検索時間

図1:インデックスなしの場合の集計検索時間


   Oracle、PostgreSQLともに、キャッシュ上にデータが存在していないDB起動直後の場合より、二度目以降のキャッシュされている状態の方が時間が短縮されました。処理コストの大きいディスクI/Oが省略できるため、一般的に処理が高速化されます。

   PostgreSQLはどちらの状態でも、Oracleと比較すると多くの時間を必要としています。PostgreSQLに対するOracleの処理時間はそれぞれ20%、7%程度であり、全件検索時の処理速度はOracleの方が高速であると言えます。

   データ量に対するキャッシュのサイズは十分に用意しているため、I/Oの差は「起動直後−二度目以降」の差として現れるはずです。起動直後と二度目 以降の差よりも、OracleとPostgreSQLの差の方が大きいことから、検索と集計の処理でのオーバヘッドの差が顕著に現れていると考えることが できます。

   さらに言えば、データのフラグメントが進んだ場合、PostgreSQLではデータ格納上の理由により、その悪化がどうしても顕著に現れてしまいます。

 

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る