首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化InterBase查询

优化InterBase查询
EN

Stack Overflow用户
提问于 2010-12-10 05:08:01
回答 2查看 313关注 0票数 0
代码语言:javascript
运行
复制
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()函数会忽略这些日期。为了解决这个问题,我将子操作表与其自身连接起来,并将其范围缩小到只包含兄弟操作都具有非空结束日期的子操作。

有没有什么方法可以优化带有非空结束日期的子操作的父操作的搜索?

EN

回答 2

Stack Overflow用户

发布于 2010-12-10 05:15:59

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

代码语言:javascript
运行
复制
AND NOT EXISTS (SELECT NULL
                FROM   AI_665 a2
                WHERE  a2.AP_1033 = a.AP_1033
                AND    a2.AP_3222 IS NULL)
票数 0
EN

Stack Overflow用户

发布于 2013-04-26 22:05:04

您必须创建一个降序索引来加快MAX()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4403134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档