我们的数据库中有300万条记录。我们需要通过删除第一个字母0来更新具有相同邮政编码列的邮政编码列。
identifyno,addresstypecode是地址表中的复合主列。
我们使用以下查询300次(300 * 10000 = 3000000)
UPDATE db2inst1.address SET postalcode = SUBSTR(postalcode,2)WHERE(identifyno,addresstypecode)IN(SELECT identifyno,addresstypecode FROM db2inst1.address WHERE countrycode =' IN' AND SUBSTR(postalcode ,1,1)=' 0' FETCH FIRST仅10000行); 提交;
执行需要很长时间(差不多1天)。
请帮助我改进查询的效果。
答案 0 :(得分:1)
我认为问题在于您的查询会触及同一个表两次。您可以将其简化为:
UPDATE db2inst1.address
SET postalcode = SUBSTR(postalcode,2)
WHERE countrycode='IN' AND SUBSTR(postalcode,1,1)='0'
我不明白为什么你只更新前1000条记录,特别是因为你没有ORDER BY子句,因此数据库引擎任意分配顺序。