Domanda

Ho letto che il CBO di Oracle (su versioni recenti) è così buono che anche se viene fornito l'ordine di join possibile, CBO prende automaticamente l'ordine di join. Quindi i suggerimenti come ordinati faranno del bene nelle versioni recenti (10,11)?. È possibile per il CBO perdere un ordine di join ottimale?. Grazie.

È stato utile?

Soluzione

La mia esperienza personale è che con Oracle 10G / 11G, difficilmente puoi migliorare qualsiasi domanda con suggerimenti. Molto spesso si rivelano per esibirsi peggio nel modo in cui tu pensare è ottimale. Il CBO è davvero migliorato drasticamente.

Esistono ancora alcune limitazioni (molto remote) alle strutture di trasformazione delle query, in particolare con piuttosto complesse OUTER JOIN costrutti, perché internamente, la sintassi ANSI è ancora mappata su alcuni costrutti oracoli arcaici che coinvolgono il (+) operatore. A parte questo, e altri casi molto remoti, non penso più che i suggerimenti siano necessari.

Puoi sintonizzarti molto meglio riscrivendo un po 'di SQL o aggiungendo vincoli/indici. Naturalmente, queste cose sono vere solo se le tue statistiche e gli istogrammi sono corretti, aggiornati e sensibili, come ha commentato correttamente Skaffman

Altri suggerimenti

I risultati di Oracle CBO dipendono da così tanti Parametri, che difficilmente posso prevedere il piano risultante nel sistema reale. Come regola generale ti suggerisco di non usare suggerimenti, se non sei sicuro di te dovere usali.

Per quanto riguarda ORDERED Suggerimento della mia esperienza c'è pochissime volte in cui dovresti dire a Oracle l'ordine esatto per i giunti.

Ad ogni modo, il modo migliore per scoprirlo è fare alcuni esperimenti da solo, provare e scegliere la soluzione migliore :)

Ti suggerisco di leggere Oracle Effective By Design di Tom Kyte: c'è un ottimo capitolo sull'ottimizzazione delle query e su come funziona CBO.

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