徹底比較!! Oracle & PostgreSQL 7

テスト其の四 〜 データの削除

テスト其の四 〜 データの削除

   最後に削除処理をテストしてみます。まずは例のごとく、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のテスト結果と同じく、そのデータ構造の違いによる操作時のコスト差であると言えます。

 

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

人気記事トップ10

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