我有一个 Oracle SQL 查询作为存储过程的一部分:
DELETE FROM item i
WHERE NOT EXISTS (SELECT 1 FROM item_queue q WHERE q.n=i.n)
AND NOT EXISTS (SELECT 1 FROM tool_queue t WHERE t.n=i.n);
关于表格的一些信息:
- item 包含大约 10k 行,第 n 列有索引
- item_queue 包含大约 100 万行,也有 n 列的索引
- tool_queue 还包含大约 500 万行索引
我想知道是否可以以某种方式优化查询/子查询以使它们运行得更快,我认为删除通常相当快
最佳答案
把你的delete变成select,然后你可以检查和优化查询部分。
否则请注意 - 删除并不是最快的事情。删除时会发生很多事情。
OTOH 我认真地认为....问题是两个子查询。查询计划是什么样的?
关于SQL优化: deletes taking a long time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2455936/