【问题标题】:How do you modify an SQL query to iteratate over every 100 results and then perform an outter query?如何修改 SQL 查询以迭代每 100 个结果,然后执行外部查询?
【发布时间】:2013-05-22 13:31:13
【问题描述】:

以下查询:

DELETE FROM attachmentdata
WHERE attachmentid IN
  ( SELECT attachmentid
    FROM attachments
    WHERE pageid IN
      ( SELECT contentid FROM content_delete )
  );

如果内部嵌套的 SELECT 查询返回一个小列表(可能是几百个),则可以完美运行。

但现在我试图在将返回 10000 - 15000 行的东西上运行它,这需要很长时间。我运行了查询,45 分钟后没有任何反应。

是否可以修改查询,使内部 SELECT 返回的每 100 个结果都转到外部 DELETE 查询,然后转到下一个 100 个结果?

【问题讨论】:

  • 一般情况下,您必须使用原始 SQL 之外的脚本语言来执行此操作。
  • @GordonLinoff - 如果解决方案使用 shell / bash 脚本就可以了。
  • @user1068636 。 . .在 Oracle 中,它将是 PL/SQL 脚本。

标签: sql oracle11g query-optimization


【解决方案1】:

为了让它更快,去掉INs ...

(甲骨文)...

DELETE  ad
FROM attachmentdata AS ad 
INNER JOIN attachments AS att ON ad.attachmentid = att.attachmentid
INNER JOIN content_delete AS cd ON cd.contentid = att.pageid

(mysql) ...

DELETE  ad.*
FROM attachmentdata AS ad 
INNER JOIN attachments AS att ON ad.attachmentid = att.attachmentid
INNER JOIN content_delete AS cd ON cd.contentid = att.pageid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2021-12-18
    • 2015-07-09
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多