Sql 优化数据库间查询

Sql 优化数据库间查询,sql,query-optimization,interbase,Sql,Query Optimization,Interbase,此查询是较大查询的一小部分,它会导致整个调用执行非常缓慢 基本上,有一个父操作,然后在它下面有几个子操作。操作的估计结束日期与实际结束日期仅存储在子级,因此为了为父级派生一个结束日期,我尝试在子级查找最大的日期。我遇到的问题是,当一个子操作没有完成时,它有一个空的结束日期,MAX函数会忽略这些。我通过将子操作表连接到自身并将其缩小到只包含其兄弟姐妹都具有非空结束日期的子操作来解决这个问题 是否有任何方法可以优化对具有非空结束日期的子项的父操作的搜索?我的上一个答案有一个错误,但这可能会有所帮助:

此查询是较大查询的一小部分,它会导致整个调用执行非常缓慢

基本上,有一个父操作,然后在它下面有几个子操作。操作的估计结束日期与实际结束日期仅存储在子级,因此为了为父级派生一个结束日期,我尝试在子级查找最大的日期。我遇到的问题是,当一个子操作没有完成时,它有一个空的结束日期,MAX函数会忽略这些。我通过将子操作表连接到自身并将其缩小到只包含其兄弟姐妹都具有非空结束日期的子操作来解决这个问题


是否有任何方法可以优化对具有非空结束日期的子项的父操作的搜索?

我的上一个答案有一个错误,但这可能会有所帮助:

SELECT
  AI_636.PARENT_ID AS PART,
  MAX(b.AP_1036) AS ESTEND,
  MAX(a.AP_3222) AS ACTEND
FROM
  AI_636
  LEFT OUTER JOIN AI_665 a
    ON
    (
      a.AP_1033 = AI_636.PARENT_ID
      AND SUBSTR(a.AP_1028, 1, 4) >= '2000'
      AND a.AP_1030 NOT IN ('994')
      AND
      (
        a.AP_1033 NOT IN
        (
          SELECT AI_665.AP_1033 FROM AI_665 WHERE AI_665.AP_3222 IS NULL
        )
      )
    )
  JOIN AI_665 b
    ON
    (
      b.AP_1033 = AI_636.PARENT_ID
      AND SUBSTR(b.AP_1028, 1, 4) >= '2000'
    )
  GROUP BY AI_636.PARENT_ID

您必须创建一个降序索引来加速MAX

从未在interbase中使用过,但DISTINCT可能与组无关。您是对的,我稍微更新了我的查询并将其删除。否,因为这仅检查当前行是否为空。额外的子查询检查所有行中的某个AP_1033Aah,这是有意义的。你试过一个不存在的吗?我更新了我的评论。这有助于加快它一点,但它仍然比我想在大计划的事情慢得多
AND NOT EXISTS (SELECT NULL
                FROM   AI_665 a2
                WHERE  a2.AP_1033 = a.AP_1033
                AND    a2.AP_3222 IS NULL)