Для каждого цикла для таблицы в OpenEdge 10.2b требуется больше времени

Ниже для каждого цикла требуется больше времени, и я не могу отследить использование индекса с помощью XREF, поскольку таблица использует схему Oracle. Пожалуйста, помогите мне.

Необходимо создать отчет для другого типа отчета (тип отчета является входным параметром в моем коде). Один тип отчета может содержать более 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") 

person user3580861    schedule 28.04.2014    source источник
comment
Требуется больше времени, чем что?   -  person Tom Bascom    schedule 28.04.2014
comment
Можете ли вы запустить трассировку на стороне Oracle, чтобы проверить, какой индекс используется? Также это может помочь при запросе на Прогресс [knowledgebase.progress.com/articles/Article/ База данных   -  person Terry Bochaton    schedule 28.04.2014


Ответы (1)


«ИЛИ» в конце значительно замедлит работу - 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") 
person Tim Kuehn    schedule 29.04.2014