kul*_*uda 19 java spring spring-data
Spring中JpaRepostory delete(...)和deleteInBatch(...)方法有什么区别?第二个"删除一个SQL语句中的项目",但从应用程序/数据库的角度来看它意味着什么?为什么存在两种具有相似结果的不同方法,何时使用一种或另一种更好?
编辑:
这同样也适用于deleteAll()和deleteAllInBatch()...
Ben*_*rer 16
这里的答案并不完整!
首先,让我们检查文档!
void deleteInBatch(Iterable<T> entities)
Deletes the given entities in a batch which means it will create a single Query.
Run Code Online (Sandbox Code Playgroud)
因此,“delete[All]InBatch”方法将使用 JPA 批量删除,例如“DELETE FROM table [WHERE ...]”。这可能更有效,但它有一些警告:
这是因为 JPA 会向数据库发出批量 DELETE 语句,绕过缓存等,因此无法知道哪些实体受到影响。
虽然我在这里找不到具体的文章,但我会推荐Vlad Mihalcea写的所有内容,以便更深入地了解 JPA。
TLDR:“inBatch”方法使用批量 DELETE 语句,它可以快得多,但有一些警告 bc。它们绕过 JPA 缓存。您应该真正了解它们的工作原理以及何时使用它们来受益。
Kur*_*ois 10
该delete方法将在一次操作中删除您的实体.在deleteInBatch即将批量删除几个语句和删除它们为1个操作.
如果您需要大量删除操作,批量删除可能会更快.
小智 8
deleteInBatch(...) 在日志中看起来像这样:
DELETE FROM table_name WHERE (((((((? = id) OR (? = id)) OR (? = id)) OR (? = id)) OR (? = id)) OR (? = id)) OR (? = id))
如果要删除的数据量达到 SQL Server 查询的最大大小,这可能会导致出现问题: SQL Server 查询的最大大小?IN条款?有没有更好的方法
| 归档时间: |
|
| 查看次数: |
16483 次 |
| 最近记录: |