Domanda

View1 è:

SELECT A, B, C FROM view2
UNION ALL
SELECT A, B, C FROM view3
  INNER JOIN TBL5 ON view3.CODE = TBL5.CODE

La colonna C è indicizzato nelle tabelle di origine, e quando eseguo una delle dichiarazioni selezionate individualmente che utilizza l'indice e torna in un lampo. Quando uso la vista il tempo è scaduto. Ho avuto l'impressione che Oracle query riscrisse contro le opinioni e gli indici utilizzati dove utile, piuttosto che facendo un SELECT * FROM VIEW1 e poi applicare i predicati dopo il fatto.

Che cosa sto facendo di sbagliato? I punti di vista di campionamento superiori a illuminare il problema, ma i miei veri viste ogni uniscono decine di tavoli in modo da un punto di vista è davvero necessario.

È stato utile?

Soluzione

L'ottimizzatore non sa quale sia il valore di codice sarà prima del tempo in cui si costruisce il piano di esecuzione perché si sta andando contro la vista. Se siete a 11g è possibile utilizzare il PUSH_PRED hint di ottimizzazione per farlo funzionare come ci si aspetta.

Altri suggerimenti

si può provare un suggerimento. o assicurarsi che le tabelle sono analizzati.

un altro pensiero -? Magari fare un Meterialized Visualizza

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top