TOP比較データ> テスト其の四 〜 データの削除




徹底比較!! Oracle & PostgreSQL
徹底比較!! Oracle & PostgreSQL

第7回:PostgreSQLの適用範囲を考える
〜 更新・削除のパフォーマンス

著者:ミラクル・リナックス  高橋 強   2005/6/20
前のページ  1  2  3
テスト其の四 〜 データの削除

   最後に削除処理をテストしてみます。まずは例のごとく、10万件の社員表を全件deleteした場合です。
10万件のデータを全削除した場合の実行速度
図3:10万件のデータを全削除した場合の実行速度


   deleteの場合もupdateと事情は似ています。PostgreSQLの場合は、全レコードに対して削除マークを付けるだけなので、処理は高速で、インデックスの有無はその書き換え対象の大きさへ若干影響するだけという結果でした。インデックスありの場合は、ない場合の6%程上乗せしただけの時間でした。

   対してOracleの場合は行を削除するコストは高く、インデックスなしの場合、PostgreSQLに対して3.5倍ほどの実行時間を要した結果でした。ロールバック情報作成などのコストの高さが原因です。また、インデックスの有無が大きく影響しています。こういった行データを管理する複雑さ故のコストの高さはOracleでは避けられません。

   ただし、全件deleteの場合ならばtruncateコマンドもありますし、インデックスを一旦削除するという方法もあるでしょう。削除に関してはPostgreSQLではそこまで考えずに実行しても問題なさそうです。

※注: truncateコマンドはOracle、PostgreSQL共に使用可能です。


条件付きの削除テスト

   続いてもう少し実用に即したパターンのデータも比較してみます。updateのテスト同様10万件あるデータ中の1万件をランダムに選択し、deleteします。

delete from 社員表 where 社員番号=[任意の番号];

   上記のようなSQL文を1万回繰り返し処理します。社員番号はランダムに生成し、1から10万までの範囲で重複もありえます。

10万件のデータから1万件をランダムに削除した場合の実行速度
図4:10万件のデータから1万件をランダムに削除した場合の実行速度


   この場合もupdateと同様の結果となりました。インデックスありの場合、実行時間は「Oracle > PostgreSQL」であり、インデックスがない場合は逆に「Oracle < PostgreSQL」となります。

   インデックスなしの場合の結果とありの場合の結果が非常に大きな差となって現れるPostgreSQLの結果も同様でした。PostgreSQLのインデックスの有無による処理時間の差は、57倍ほど(参考にOracleは2.3倍ほど)あり、インデックスの効果の程が明らかに見て取れます。

   delete文のテスト結果もinsert文の場合と同様、単純なデータの削除速度のみで言えば、PostgreSQLの方が高速であるという結果でした。理由についてはupdateのテスト結果と同じく、そのデータ構造の違いによる操作時のコスト差であると言えます。

前のページ  1  2  3


ミラクル・リナックス
著者プロフィール
ミラクル・リナックス株式会社  高橋 強
1993年某SIベンダへ入社後、Oracle、DB関連のコンサルティング、チューニング、社内案件の技術支援などを10年ほど担当。2004年ミラクル・リナックス株式会社へ入社。


INDEX
第7回:PostgreSQLの適用範囲を考える 〜 更新・削除のパフォーマンス
  データ更新、削除に関するパフォーマンス
  テスト其の参 〜 データの更新
テスト其の四 〜 データの削除