我正在使用Oracle 10g,并且要从“人员”表中删除大约500万条记录(总共有1500万条记录),而在“订单”表中没有任何引用(总共500万条记录)
由于一次删除500万条记录会导致撤消日志问题,因此我决定批量删除10万条记录。我正在使用以下查询:
DELETE FROM Persons p
WHERE City = 'ABC'
AND NOT EXISTS
(SELECT O_Id
FROM Orders o
WHERE p.P_Id = o.P_Id)
AND ROWNUM <= 100000
现在的问题是,执行该查询所需的时间与执行500万条记录所花费的时间一样,要花费500万条记录,这是因为仍将进行全表扫描和两个表的联接。
有没有一种有效的方法来重写此查询以加快执行速度?还是用更好的连接条件替换NOT EXISTS子句?还是使用更好的方法将记录限制为100k?
PS这只是一次操作,因此我不能使用任何DDL操作,但是pl / sql很好
如果希望此查询运行更快,请添加以下两个索引:
create index idx_persons_city_pid on persons(city, p_id);
create index idx_orders_pid on orders(p_id);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句