目次
概要
Spring JPA Dataにおける、deleteAllとdeleteAllInBatchの挙動の違いについてです。
結論から言うと、実行されるSQLが違います。
SQLの違い
【前提】
3件のデータがあるとします。
deleteAll
削除対象をSELECTで取得してから、1行ずつ削除しています。
以下が実行時のSQLです。
1 2 3 4 5 6 7 8 |
>>> deleteAll called org.hibernate.SQL : select item0_.id as id1_0_, item0_.created_date as created_2_0_, item0_.created_user as created_3_0_, item0_.delete_flg as delete_f4_0_, item0_.description as descript5_0_, item0_.name as name6_0_, item0_.quantity as quantity7_0_, item0_.updated_date as updated_8_0_, item0_.updated_user as updated_9_0_ from item item0_ where ( item0_.delete_flg = 0) org.hibernate.SQL : delete from item where id=? o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [INTEGER] - [1] org.hibernate.SQL : delete from item where id=? o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [INTEGER] - [2] org.hibernate.SQL : delete from item where id=? o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [INTEGER] - [3] |
deleteAllInBatch
単純に全件削除します。
以下が実行時のSQLです。
1 2 |
>>> deleteAllInBatch called org.hibernate.SQL : delete from item |
実行されるSQLからわかること
全件削除が目的であれば、deleteAllInBatchを使うのが合理的です。
deleteAllは1行ずつ削除されるのでパフォーマンスが悪いため、おすすめできません。
コメント