Вот фон:Oracle Index Использование в View с агрегатами
Версия: Oracle 8i (Не ненавидеть меня за устаревания Мы модернизируем.!)
SQL> describe idcpdata
Name Null? Type
----------------------------------------- -------- ---------------------------
ID NOT NULL NUMBER(9)
DAY NOT NULL DATE
STONE NUMBER(9,3)
SIMPSON NUMBER(9,3)
OXYCHEM NUMBER(9,3)
PRAXAIR NUMBER(9,3)
Вот запрос что возвращается сразу:
SQL> select to_char(trunc(day,'HH'),'DD-MON-YYYY HH24') day,
2 avg(decode(stone,-9999,null,stone)) stone,
3 avg(decode(simpson,-9999,null,simpson)) simpson,
4 avg(decode(oxychem,-9999,null,oxychem)) oxychem,
5 avg(decode(praxair,-9999,null,praxair)) praxair
6 from IDcpdata
7 where day between
8 to_date('14-jun-2009 0','dd-mon-yyyy hh24') and
9 to_date('14-jun-2009 13','dd-mon-yyyy hh24')
10 group by trunc(day,'HH');
Когда я создаю представление на основе этого запроса, только без ИНЕК, запрос к этой точке зрения, с ИНЕК, не в состоянии использовать вид. Существует очень избирательный индекс, который используется в прямой версии SQL-запроса. Полное сканирование таблицы занимает 20 минут.
create or replace view theview as
select TRUNC(day,'HH') day,
avg(decode(stone,-9999,null,stone)) stone,
avg(decode(simpson,-9999,null,simpson)) simpson,
avg(decode(oxychem,-9999,null,oxychem)) oxychem,
avg(decode(praxair,-9999,null,praxair)) praxair
from IDcpdata group by TRUNC(day,'HH');
SQL> select * from theview
2 where day between
3 to_date('14-jun-2009 0','dd-mon-yyyy hh24') and
4 to_date('14-jun-2009 13','dd-mon-yyyy hh24');
Я пробовал подсказки INDEX() в представлении, запросе и обоим. Я попробовал глобальную подсказку INDEX, указав полное имя базовой таблицы. Я также попробовал MERGE.
Мне кажется, что Oracle должен иметь возможность использовать индекс, так как inline SQL делает. Я просто не могу понять, как это сделать. Я уверен, что это я, а не Oracle, я просто этого не вижу.
Заранее благодарим за любые предложения!
Вы правы! Единственный реальный вопрос: почему он не использовал мой функциональный индекс, как только я понял, что, нажимая агрегат в представление, я больше не мог использовать индексы для базовых значений. Эти секретные заклинания Oracle развязали мощь функциональных индексов, и я очень доволен. Спасибо! – 2009-09-21 18:30:59