我正在编写一些必须在某个数据库中级联删除记录的代码,我注意到性能下降,因为数据库中有更多记录。当我刚刚填充数据库时,看起来填充开始和结束之间的性能似乎没有大幅下降,但是当我进行级联删除时,性能随着更大的数据库而下降。我假设它需要为级联进行大量连接才能找到其他表中的所有相关记录,这会导致它在较大的数据集上变慢。但是当我只是添加一条记录时,它是否还必须测试已经存在的主键和其他唯一约束,并且在更大的数据集中也不会更慢,或者与删除过程相比这是如此快得多当你刚刚填充数据库时,很难注意到性能下降?或者级联是否只是缓慢,因为我没有专门索引它级联到的表?
那么其次,如果这些表已经将生成的id作为主键,那么它会对它级联的表进行索引以加速级联吗?在更一般的意义上:主键是否自动编入索引?
答案 0 :(得分:3)
我假设它需要为级联进行大量连接才能找到其他表中的所有相关记录,这会导致它在较大的数据集上变慢。
不要假设。打开Hibernate的日志记录(特别是org.hibernate.SQL
的记录器),看看完全 Hibernate执行哪些SQL语句。然后根据事实做出决定并采取行动,而不是假设。
在更一般的意义上:主键是否自动编入索引?
是