我有一个进口商系统,它更新表中已有行的列。由于更新需要时间,我将其更改为DELETE和BULK INSERT。优化删除
这里是我的数据库设置片段
Table: ParameterDefinition
Columns: Id, Name, Other Cols
Table: ParameterValue
Columns: Id, CustId, ParameterDefId, Value
我从我的XML源关联到ParamterDefinition.Name的值,所以进口我第一次删除所有现有ParamterValue所有的ParamterDefinition.Name在传递XML并最终对XML中的所有值进行批量插入。这里是我的查询
DELETE FROM ParameterValue WHERE CustId = ? AND ParameterDefId IN (?,?...?);
为1000个客户以上DELETE语句被称为1000倍,这是非常耗时,现在,大约64秒。
有没有更好的方法来处理1000个客户的DELETE?
谢谢,
Sheeju
用于删除数据库还必须找到记录来对其进行操作。我建议再次检查更新查询,看看它为什么会变慢。 此外,为什么不使用'transaction'来帮助DB不会每次都将更改写入磁盘,而是在您提交时将它们集中在一起。我的2美分。 – Sanjeev 2014-09-24 07:15:12
你给了我们一个假设,即瓶颈是数据库。但是在寻求解决方案之前,您需要确定瓶颈。考虑到你正在通过外键删除记录(这些记录应该被自然地编入索引),我很惊讶它正在让数据库平台去做它的工作。你肯定这不是一个应用程序问题? – rurouni88 2014-09-24 07:21:33
@sanjeev:更新查询需要更多时间,可以说每个客户平均有3个参数值被更新,1个新的参数值然后会导致3000个更新和1000个插入。我已经在使用事务来确保我执行单一提交 – sheeju 2014-09-24 08:14:11