Java EclipseLink添加与更新性能

Java EclipseLink添加与更新性能,java,sql-server,database,eclipselink,Java,Sql Server,Database,Eclipselink,有谁能给我一个关于以下情况的直觉吗 我们正在使用EclipseLink修改Microsoft SQL server。我们的应用程序包含一个导入功能,因此从这些导入中可以生成许多表(比如表a)的插入。另一方面,当我们删除表中的其中一个条目时,我们实际上并没有删除它,而是将“deleted”标志设置为true。在不同的表(如表X、Y、Z)之间存在关系,因此,如果我们从X中删除一个元素,我们也会删除A的一些元素。重要的是,我们现在分别插入和删除每个元素。考虑到大量的导入和大量的批量更新(我们的删除),

有谁能给我一个关于以下情况的直觉吗

我们正在使用EclipseLink修改Microsoft SQL server。我们的应用程序包含一个导入功能,因此从这些导入中可以生成许多表(比如表a)的插入。另一方面,当我们删除表中的其中一个条目时,我们实际上并没有删除它,而是将“deleted”标志设置为true。在不同的表(如表X、Y、Z)之间存在关系,因此,如果我们从X中删除一个元素,我们也会删除A的一些元素。重要的是,我们现在分别插入和删除每个元素。考虑到大量的导入和大量的批量更新(我们的删除),我们的表a增长了很多,因此目前它的大小为50万

使用EclipseLink PerformanceProfiler,我发现我们的更新时间会减慢,但插入时间不会明显减慢。因为我们在表A的复合主键上有一个索引,所以我预计插入索引需要O(1)个时间(假设索引类似于HashMap)和类似O(1)的时间才能插入到表中。对于更新,我得到O(1)用于检索,O(1)用于写入。 实际上,一个元素的插入时间为0.6毫秒,但更新时间为800毫秒(!)。有人对此有解释吗?此外,如果有人知道改善这种情况的好办法,我也很高兴听到这些


到目前为止,我只知道批量更新那些满足特定条件的元素,例如:更新表a中与表x的元素x相关的所有元素。但是由于我们在多个表上有更多的层次结构,我不确定我从中得到了多少。

你好,本,800毫秒秒,它们是在SQL server还是java端进行度量的?插入对于JPA来说更便宜,因为它不需要重新验证/刷新整个对象树。当向数据库回写更新时,JPA必须检查整个内存中的objecttree,其中(可能相关的)对象也已被修改。800毫秒是使用eclipselink的PerformanceProfiler在Java端测量的。我能告诉JPA没有其他相关的变化吗?在更改删除标志的情况下,我确信没有其他更改。需要更多信息-您是在谈论实际的SQL更新/插入时间,还是通过刷新/提交在EntityManager中处理所做操作所花费的时间?批处理编写有助于提高性能,因为它意味着来回的语句更少—您将获得多少性能完全取决于您的应用程序模型和使用情况,当然也取决于导致大部分速度减慢的原因。据我所见,这是sql执行时间,不包括entitymanager执行准备。