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

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

   最後に削除処理をテストしてみます。まずは例のごとく、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

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

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30