微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QUERY-PREPARE() 加载时间过长这是最好的选择吗?

如何解决QUERY-PREPARE() 加载时间过长这是最好的选择吗?

每个 it-codigo 都有 1 个或多个 es-codigo。我正在尝试找到 it-codigo 输入的所有 es-codigo,但是花费的时间太长了。我在我的代码中做错了什么吗?对于我所看到的,一切都很好,除非我不知道我做错了什么。在这种情况下,QUERY-PREPARE() 是最佳选择吗?

    DEF VAR qEstrutura AS CHAR.

IF pi-cod-emitente <> 0 THEN DO:
    qEstrutura = " WHERE item-cli.cod-emitente = " + QUOTER(pi-cod-emitente).
END.

IF pc-it-codigo <> "" THEN DO:
    IF qEstrutura = "" THEN
        qEstrutura = " WHERE estrutura.it-codigo = " + QUOTER(pc-it-codigo).
    ELSE
        qEstrutura = qEstrutura + " AND estrutura.it-codigo = " + QUOTER(pc-it-codigo).
END.

IF pc-item-cli <> "" THEN DO:
    IF qEstrutura = "" THEN 
        qEstrutura = " WHERE item-cli.item-do-cli = " + QUOTER(pc-item-cli).
    ELSE
        qEstrutura = qEstrutura + " AND item-cli.item-do-cli = " + QUOTER(pc-item-cli).
END.


cQuery = cQuery + " FOR EACH item-cli,".
cQuery = cQuery + " EACH estrutura ".
cQuery = cQuery + qEstrutura + " BREAK BY estrutura.es-codigo".


QUERY qConsulta:QUERY-PREPARE(cQuery).

QUERY qConsulta:QUERY-open().

GET FirsT qConsulta.

do while AVAILABLE item-cli:

    IF QUERY qConsulta:FirsT-OF(1) THEN DO:
    
        CREATE tt-estrutura.
        ASSIGN
        tt-estrutura.it-codigo = estrutura.it-codigo
        tt-estrutura.es-codigo = estrutura.es-codigo
        .
        GET NEXT qConsulta.
    END.
END.

QUERY qConsulta:QUERY-CLOSE().


FOR EACH tt-estrutura:
    disP tt-estrutura.
END.

解决方法

我相信 QUERY-OPEN() 需要时间。不是 QUERY-PREPARE()。

您的查询仅对第二个表执行选择 (WHERE) 和排序 (BY)。这使得很难利用指标。 OpenEdge ABL 查询引擎不支持翻转缓冲区序列。尝试扭转查询:

对于每个 estrutura WHERE ......,第一个 item-cli。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。