Запрос idh_hist очень медленный при поиске по дате
Я пытаюсь написать запрос для поиска в таблице счетов MFG/PRO 'idh_hist' для определенного диапазона дат. Он работает очень медленно, когда добавлено условие даты. Но когда я откладываю условие даты, это очень быстро. Можете ли вы предложить способы написания запроса на idh_hist, который выполняется довольно быстро с условиями.
Ниже мой запрос:
for each idh_hist no-lock where idh_domain = "d0002"
and idh_due_date = TODAY:
/* display code here... */
end.
Заранее спасибо!
Индекс базы данных:
Flags Index Name Cnt Field Name
----- --------------------- ---- ---------------------
idh_fsm_type 4 + idh_domain
+ idh_fsm_type
+ idh_nbr
+ idh_line
pu idh_invln 4 + idh_domain
+ idh_inv_nbr
+ idh_nbr
+ idh_line
idh_part 4 + idh_domain
+ idh_part
+ idh_inv_nbr
+ idh_line
u oid_idh_hist 1 + oid_idh_hist
1 ответ
У вас, кажется, нет индекса, который использует idh_due_date. Вам нужно будет добавить такой индекс.
4gl использует правила для выбора индексов на основе предложения WHERE. Самое важное правило заключается в том, что будут использоваться ведущие компоненты индекса, которые имеют совпадения равенства.
У показанного вами запроса есть только одно такое совпадение для idh_domain. Так что тогда применяются правила разрыва связи. Это приведет к выбору индекса idh_invln.
Таким образом, чтобы удовлетворить ваш запрос, все записи, которые соответствуют полю "idh_domain", должны быть найдены. (Если у вас есть только один домен, это означает, что вы выполняете сканирование таблицы.)
Вы, вероятно, хотите добавить индекс для idh_domain и idh_due_date. Это было бы идеально подходит для вашего запроса.