Vue matérialisée : quelles sont les conditions pour un REFRESH FAST ?
Bonjour,
Je pensais utiliser des vues matérialisées pour améliorer les performances de mes traitements.
Mais je me rends compte que la mise à jour de ces vues matérialiseés est parfois plus longue que l'exécution de la requête en elle-même.
Je comptais sur l'option REFRESH FAST pour ne mettre à jour que les lignes modifiées, mais tous mes essais sont refusés avec le message
Citation:
ORA-12015: cannot create a fast refresh materialized view from a complex query
Apparemment, sont exclues de cette possibilité de rafraichissement rapide les requêtes comportant une jointure ou un regroupement :?
Quelqu'un pourrait-il me confirmer cette information... ou me donner les pistes pour contourner le problème ?
Quelques ouvertures issues d'une expérience en 11g
Le guide SQL d'Oracle indique des restrictions (NOT IN, UNION, SYSDATE...), mais le Datawarehousing Guide suggère que si toutes les règles ne sont pas respectées, le moteur Oracle essaie tout de même de s'en sortir, éventuellement au prix de la performance... Et cela ouvre des perspectives.
Voici un exemple de requête UNION qui peut aller dans une MV avec FAST REFRESH:
(je remplace SELECT par s à cause d'un firewall un peu zêlé)
s col1, col2, 1 as TAB_TYPE, rowid from TABLE1
UNION ALL s col1, col2, 2 as TAB_TYPE, rowid from TABLE2
Moyennant les divers autres pré-requis (PK, MV logs,...), cela marche, sans doute parce que l'ajout de la colonne TAB_TYPE évite le risque de doublon entre les sous-requêtes de l'UNION ALL.
L'idée n'est même pas de moi, mais j'aurais gagné du temps si je l'avais trouvée dans un forum...:P