2012-09-13 10 views
5

ho scritto un complesso di query di Oracle SQL e spiegare statistiche piano assomigliano a questo: Costo: 209.201 Byte: 187.944.150 cardinalità: 409.675Oracle spiegare piano: cardinalità restituisce un numero enorme ma la query non restituisce alcun record

Ora DBA ha sintonizzato la query e le statistiche hanno questo aspetto: Costo: 42.996 byte: 89.874.138 Cardinalità: 209.226

La mia prima domanda è: se i numeri sono inferiori, significa automaticamente prestazioni migliori? Quale numero è il più efficace? Costo/Cardinalità/Byte? La mia seconda domanda è: capisco che la cardinalità è il numero di righe lette. Ma quando eseguo la query, restituisce le righe '0'! La mia impressione è che Cardinality debba essere uguale per due query che dovrebbero restituire gli stessi set di risultati. Questo credo sia sbagliato?

+0

La cardinalità è (in poche parole) il numero di righe che l'ottimizzatore _thinks_ sarà necessario; a seconda di molti fattori, incluso il livello delle statistiche, potrebbe essere sbagliato. – Ben

+0

Grazie. Puoi spiegare cos'è BYTES? – Victor

+1

@Kaushik: Dalla documentazione, 'BYTES' è" Stima secondo l'approccio di ottimizzazione della query del numero di byte a cui accede l'operazione. " Ma questo è fuorviante, è in realtà il numero di byte * restituiti * dall'operazione. Ad esempio, se hai una scansione completa della tabella, leggerà ogni byte nella tabella, ma 'BYTES' è la stima della dimensione * dopo * eventuali filtri. http://docs.oracle.com/cd/E11882_01/server.112/e16638/ex_plan.htm#r22c1-t12 –

risposta

3

Costo, byte, cardinalità ... sono tutte stime basate su input come le statistiche fornite all'ottimizzatore. Quindi non significano automaticamente nulla ma possono dare un'idea. Nelle parole di Oracle Performance Tuning Guide "È preferibile utilizzare EXPLAIN PLAN per determinare un piano di accesso e successivamente dimostrare che si tratta del piano ottimale attraverso i test. Quando si valuta un piano, esaminare il consumo effettivo delle risorse dell'istruzione."

Per la seconda domanda: Le query teoricamente equivalenti devono restituire la stessa cardinalità. La staticità dei tuoi tavoli potrebbe essere vecchia.

Problemi correlati