【问题标题】:minus vs delete where exist in oracle减去与删除oracle中存在的位置
【发布时间】:2012-08-02 14:12:28
【问题描述】:

我有一个CREATE TABLE 查询,可以使用两种方法完成(创建为数千/百万条记录的选择语句):

第一种方法:

create table as select some data minus (select data from other table)

首先我应该将表创建为

create table as select .....

然后

delete from ..where exist.

我猜第二种方法更好。对于哪个查询成本更低?为什么减号查询不如第二种方法快? 编辑: 我忘了提到 create 语句也有两个表的连接。

【问题讨论】:

  • 第一个更好。它将产生更少的 REDO 和 UNDO。
  • 第一种方法更好,因为你只创建你需要的记录。
  • 但是我已经检查过了,第二种方法总体上花费的时间更少。

标签: sql oracle


【解决方案1】:

减号很慢可能是因为它需要对磁盘上的表进行排序以便比较它们。

尝试使用NOT EXISTS 而不是MINUS 重写第一个查询,它应该更快并且生成的REDO 和UNDO 更少(如a_horse_with_no_name 所述)。当然,要确保WHERE子句中涉及的所有字段都被索引了!

【讨论】:

  • minus 还将抑制源表中的任何重复项,这可能不是问题,但可能是使用 not exists 的另一个原因。
【解决方案2】:

第二个会将大量记录写入磁盘,然后将其删除。在 10 种情况下,有 9 种情况会比过滤您所写的内容花费更长的时间。

因此,如果第一个实际上并不快,我们需要有关所涉及的表和语句的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 2021-12-06
    • 2014-03-29
    • 2021-02-05
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多