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

図3:10万件のデータを全削除した場合の実行速度
deleteの場合もupdateと事情は似ています。PostgreSQLの場合は、全レコードに対 して削除マークを付けるだけなので、処理は高速で、インデックスの有無はその書き換え対象の大きさへ若干影響するだけという結果でした。インデックスあり の場合は、ない場合の6%程上乗せしただけの時間でした。
対してOracleの場合は行を削除するコストは高く、インデックスなしの場合、PostgreSQLに対して3.5倍ほどの実行時間を要した結果 でした。ロールバック情報作成などのコストの高さが原因です。また、インデックスの有無が大きく影響しています。こういった行データを管理する複雑さ故の コストの高さはOracleでは避けられません。
ただし、全件deleteの場合ならばtruncateコマンドもありますし、インデックスを一旦削除するという方法もあるでしょう。削除に関してはPostgreSQLではそこまで考えずに実行しても問題なさそうです。
条件付きの削除テスト
続いてもう少し実用に即したパターンのデータも比較してみます。updateのテスト同様10万件あるデータ中の1万件をランダムに選択し、deleteします。
delete from 社員表 where 社員番号=[任意の番号];
上記のようなSQL文を1万回繰り返し処理します。社員番号はランダムに生成し、1から10万までの範囲で重複もありえます。

図4:10万件のデータから1万件をランダムに削除した場合の実行速度
この場合もupdateと同様の結果となりました。インデックスありの場合、実行時間は「Oracle > PostgreSQL」であり、インデックスがない場合は逆に「Oracle < PostgreSQL」となります。
インデックスなしの場合の結果とありの場合の結果が非常に大きな差となって現れるPostgreSQLの結果も同様でした。PostgreSQLの インデックスの有無による処理時間の差は、57倍ほど(参考にOracleは2.3倍ほど)あり、インデックスの効果の程が明らかに見て取れます。
delete文のテスト結果もinsert文の場合と同様、単純なデータの削除速度のみで言えば、PostgreSQLの方が高速であるという結果 でした。理由についてはupdateのテスト結果と同じく、そのデータ構造の違いによる操作時のコスト差であると言えます。
バックナンバー
この記事の筆者
1993年某SIベンダへ入社後、Oracle、DB関連のコンサルティング、チューニング、社内案件の技術支援などを10年ほど担当。2004年ミラクル・リナックス株式会社へ入社。
筆者の人気記事
大手ブログ検索サイトがPostgreSQLからOracleへ移行を決断した理由(後編
2006年4月13日 20:00
大手ブログ検索サイトがPostgreSQLからOracleへ移行を決断した理由(前編)
2006年4月5日 20:00
PostgreSQLの適用範囲を考える 〜 管理・運用編
2005年12月1日 20:00
PostgreSQLの適用範囲を考える 〜 ベンチマークテスト
2005年8月12日 20:00
PostgreSQLの適用範囲を考える 〜 更新・削除のパフォーマンス
2005年6月20日 20:00
PostgreSQLの適用範囲を考える 〜 データ検索のパフォーマンス
2005年5月30日 20:00
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。