级联删除在较大数据集上的性能下降,这可能是由于缺乏索引造成的吗?
问题:级联删除在较大数据集上的性能下降,这可能是由于缺乏索引造成的吗? 我正在编写一些必须级联删除某个数据库中的记录的代码,我注意到性能下降,因为数据库中有更多记录。当我只是填充数据库时,在填充开始和结束之间似乎没有性能大幅下降,但是当我执行级联删除时,性能会随着更大的数据库而下降。我假设它需要为级联进行大量连接才能找到其他表中的所有相关记录,这会导致它在更大的数据集上变慢。但是当我只添加一条记录
·
问题:级联删除在较大数据集上的性能下降,这可能是由于缺乏索引造成的吗?
我正在编写一些必须级联删除某个数据库中的记录的代码,我注意到性能下降,因为数据库中有更多记录。当我只是填充数据库时,在填充开始和结束之间似乎没有性能大幅下降,但是当我执行级联删除时,性能会随着更大的数据库而下降。我假设它需要为级联进行大量连接才能找到其他表中的所有相关记录,这会导致它在更大的数据集上变慢。但是当我只添加一条记录时,它是否还必须测试已经存在的主键和其他唯一约束,并且在更大的数据集中这是否也必须更慢,或者与删除过程相比,这是否如此之快?只是在填充数据库时很难注意到性能下降?还是因为我没有专门索引它级联到的表,所以级联速度很慢?
其次,如果这些表已经具有生成的 id 作为主键,是否会索引它级联的表以加速级联?在更一般的意义上:主键是否自动索引?
解答
我假设它需要为级联进行大量连接才能找到其他表中的所有相关记录,这会导致它在更大的数据集上变慢。
不要假设。打开 Hibernate 的日志记录(特别是org.hibernate.SQL
的记录器)以查看_exactly_Hibernate 执行了哪些 SQL 语句。然后根据事实而不是假设做出决定并采取行动。
在更一般的意义上:主键是否自动索引?
是的。
更多推荐
已为社区贡献19912条内容
所有评论(0)