为什么select查询比Oracle中的删除查询工作得更快

时间:2015-01-12 14:55:49

标签: oracle

我担心以下问题:

select * from TABLEA where COLUMNA in (select....) and
COLUMNA in (select....)

delete from TABLEA where COLUMNA in (select....) and
COLUMNA in (select....)

两者在运行时间上存在巨大差异 选择查询的运行速度比类似的删除查询快得多。

2 个答案:

答案 0 :(得分:2)

SELECT只是一个PROJECTION。 SELECT with FILTER PREDICATE是SELECTION。两者都与DELETE完全不同,后者是DML。

你的问题太宽泛了,因为它涉及很多东西。

  1. 选择语句不会操纵数据,DML会这样做。
  2. 选择不更新索引键,DML会这样做。
  3. 数据库编写者不参与select,但使用DML。
  4. OPTIMIZER对于不同的操作有不同的作用。至少看看解释计划。 ......以及更多原因。
  5. 两种不同的背景,比较没有意义。

    GUI问题

    SQL Developer等基于GUI的工具上执行时,select可能看起来更快,它实际上显示了第一个获取的行而不是完整的结果集。但是,DELETE需要实际操作所有行。

答案 1 :(得分:1)

请检查表格结构和索引。也许有很多ON DELETE CASCADE约束或很多索引要删除。 Indicies可加快选择时间并减慢删除时间。