- upgrade_date is null, 40% - upgrade_date is not null.
Имеется индекс в TableA (upgrade_date). Естественно upgrade_date is null не попадают в индекс.
1. select max(t.PK_id), min(t.PK_id)
from TableA
where upgrade_date is null;
План запроса : table access options FULL, кост 196000
2. А если дропнуть индекс и построить новый INDEX ON TableA (case when upgrade_date is null then 1 else 0 end)
и переписать запрос
select max(t.PK_id), min(t.PK_id)
from TableA
where case when p.delete_date is null then 1 else 0 end = 1;
План запроса : table access options INDEX FAST FULL SCAN, кост 24000
Можно ли добиться плана с INDEX options FULL SCAN (MIN/MAX) ?
Насколько правильно создавать такой индекс(case when upgrade_date is null then 1 else 0 end) в OLTP базе? Есть ли другой способ ускорить получение min/max?
Постройте индекс по двум колонкам: upgrade_date, pk_id
да есть отдельно MIN запрос отдельно MAX запрос
Спасибо! План запроса : table access options INDEX FAST FULL SCAN. кост чуть-чуть снизился
в чем выгода? Все равно не строится план по IFS MIN/MAX
Min/max в запросе по primary key А индекс отбора - по другому столбцу В выборке будет 2 сканирования индекса
да, с индексом (upgrade_date, pk_id), отдельно min/max все равно не выбирает IFS MIN/MAX
Обсуждают сегодня