java - 级联删除在更大数据集上的性能下降,这可能是由于缺乏索引造成的吗?

标签 java hibernate postgresql indexing cascade

我正在编写一些代码,必须级联删除某个数据库中的记录,我注意到性能下降,因为数据库中有更多记录。当我刚填充数据库时,填充开始和填充结束之间的性能似乎没有大的下降,但是当我执行级联删除时,性能会随着数据库的增大而下降。我假设它需要为级联进行大量连接才能找到其他表中的所有相关记录,这会导致它在更大的数据集上变慢。但是当我只添加一条记录时,它是否还必须测试已经存在的主键和其他唯一约束,并且在更大的数据集中这也不会更慢,或者与删除过程相比速度如此之快在填充数据库时很难注意到性能下降?还是级联速度很慢,因为我没有专门为它级联到的表编制索引?

那么其次,如果这些表已经有一个生成的 id 作为主键,是否会索引它级联的表以加速级联?从更一般的意义上讲:主键是否自动编入索引?

最佳答案

I'm assuming that it would need to make a lot of joins for the cascade to find all the related records in other tables, which causes it to slow down on bigger datasets.

不要假设。打开 Hibernate 的日志记录(特别是 org.hibernate.SQL 的记录器)以查看 确切 Hibernate 执行了哪些 SQL 语句。然后根据事实而不是假设做出决定并采取行动。

In a more general sense: are primary keys automatically indexed?

是的。

关于java - 级联删除在更大数据集上的性能下降,这可能是由于缺乏索引造成的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4070226/

相关文章:

python - 将数据库查询转换为有用的格式

java - SonarQube 多模块代码覆盖率

java - 避免 JavaDoc 注释中的重复

ruby-on-rails - 如何按计数和位置组合 postgres 组

r - 如何从 postgresql 数据库中提取数据到我的 shinyapps.io

java - 只需在 BDD (Hibernate) 中插入日期的 "Hour:Minutes"

java - 在android中填充短信

java - 需要有关创建通用数组的帮助

java - 无法实例化指定的 TransactionFactory 类 [org.transaction.JDBCTransactionFactory]

java - 我的 Hibernate CRUD 没有在表中保存数据,而是显示表为空