SQL优化: deletes taking a long time

标签 sql oracle optimization stored-procedures plsql

我有一个 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/

相关文章:

wpf - 每个对 ResourceDictionary 的引用是否创建一个新实例,或者 ResourceDictionaries 是否有缓存机制

mysql - 带加法的 SQL 子查询

mysql - 为什么 "update foo ... where bar is null"让多个调用者声明同一行?

SQL子选择,仅显示不为零的项目

database - 从远程数据库更新本地数据库

sql - 当 JOB 执行的过程没有完成时,JOB 何时再次执行它时会发生什么?

oracle - 如何在 Oracle SQL 中将结果限制为 1 行

mysql - SQL 在一个查询中进行多项求和

关于静态变量优化的 C 分支

c++ - 空流,我必须包括 ostream 吗?