Вы должны иметь возможность заменить вхождение в предложении GROUP BY на псевдоним вашего столбца perd_end_dt
. Но вхождения в условиях JOIN не могут использовать псевдоним столбца.
Это влияет на производительность. Я не думаю, что присоединиться
условия могут использовать индекс так, как они написаны в настоящее время. Тем не мение,
это только один термин в состоянии JOIN, поэтому влияние может быть очень
незначителен. То есть термины, включающие t2_pk
и t2_ind_1
, могут уже уменьшать набор строк, поэтому сравнение дат имеет дело только с небольшим набором. Это зависит от того, сколько строк мы говорим и как распределяются данные.
Один из способов выделить COALESCE()
и воспользоваться преимуществами индексации - создать избыточный столбец, являющийся результатом этого выражения. Используйте триггеры, чтобы убедиться, что оно имеет правильное значение после каждой вставки или обновления. Затем индексируйте столбец.
Но, как я уже сказал, это может быть больше проблем, чем оно того стоит. Это будет больше работы, и вы должны быть уверены, что это изменение сделает код более понятным, более корректным или более быстрым.
Другой вариант - определить псевдоним для выражения COALESCE()
.
в подзапросе. Я не могу сказать, из каких таблиц происходят столбцы, потому что
вы не квалифицируете их псевдонимами таблиц. Но если я могу предположить,
они все столбцы tbl1
:
...
FROM (
SELECT COALESCE(t1_end_dt, t6_actl_end_dt, t6_calc_end_dt) perd_end_dt,
t1_fk_t2_pk
FROM tbl1) t1
JOIN tbl2
ON (tbl2.t2_pk = t1.t1_fk_t2_pk AND tbl2.t2_ind_1 = 'Y'
AND t1.perd_end_dt BETWEEN tbl2.t2_strt_dt AND tbl2.t2_end_dt)
...