对于OpenEdge 10.2b中表的每个循环,需要更多时间

时间:2014-04-28 10:31:44

标签: progress-4gl openedge

下面为每个循环花费更多时间,并且我无法使用XREF跟踪索引使用情况,因为该表使用了Oracle Schema。请帮助我。

需要为不同的报告类型生成报告(报告类型是我的代码中的输入参数)。单个报告类型可能包含超过50,000条记录如何在分钟内访问所有记录。下面还提到了每个循环的详细信息。

FOR EACH Report 
      FIELDS(EXTRACTDATE STATUS MailingType ReportType ReportNumber 
             RequestID CustID)
      WHERE Report.EXTRACTDATE < Today
        AND Report.ReportType = 'Customer Report' 
        AND Report.STATUS = 'Pending' 
        AND (Report.MailingType  = "LETTER"
         OR Report.MailingType  = "Mail") NO-LOCK:

             < Statements >
                 .
                 .

END.

**Index Detail**

CREATE INDEX "TYPE_IDX1" ON "Report" ("EXTRACTDATE" DESC, "ReportTYPE", "STATUS", "MailingTYPE", "PROGRESS_RECID") 

CREATE INDEX "REQ_IDX1" ON "Report" ("REQUESTID", "PROGRESS_RECID") 

CREATE INDEX "RTTYP_IDX1" ON "Report" ("ReportTYPE","PROGRESS_RECID") 

1 个答案:

答案 0 :(得分:1)

最后的“OR”会大大减慢速度 - 如果将AVM分成两组AND语句并将结果分成OR,则AVM会更好:如下所示:

WHERE (Report.EXTRACTDATE < Today
    AND Report.ReportType = 'Customer Report' 
    AND Report.STATUS = 'Pending' 
    AND Report.MailingType  = "LETTER") 

            OR 

      (Report.EXTRACTDATE < Today
    AND Report.ReportType = 'Customer Report' 
    AND Report.STATUS = 'Pending' 
    AND Report.MailingType  = "Mail")