Oracle
 sql >> Database >  >> RDS >> Oracle

Funzionalità nascoste in Oracle

"Le scansioni di tabelle complete non sono sempre negative. Gli indici non sono sempre buoni."

Un metodo di accesso basato su indici è meno efficiente nella lettura delle righe rispetto a una scansione completa quando lo si misura in termini di righe a cui si accede per unità di lavoro (in genere per lettura logica). Tuttavia, molti strumenti interpretano una scansione completa della tabella come un segno di inefficienza.

Prendi un esempio in cui stai leggendo alcune centinaia di fatture da una tabella delle fatture e stai cercando un metodo di pagamento in una piccola tabella di ricerca. L'utilizzo di un indice per sondare la tabella di ricerca per ogni fattura significa probabilmente tre o quattro io logici per fattura. Tuttavia, una scansione completa della tabella di ricerca in preparazione per un hash join dai dati della fattura richiederebbe probabilmente solo un paio di letture logiche e l'hash join stesso si esaurirebbe in memoria quasi senza alcun costo.

Tuttavia, molti strumenti guarderebbero questo e vedrebbero "scansione completa della tabella" e ti direbbero di provare a utilizzare un indice. Se lo fai, potresti aver appena de-sintonizzato il tuo codice.

Incidentalmente, l'eccessiva dipendenza dagli indici, come nell'esempio sopra, fa aumentare il "Buffer Cache Hit Ratio". Questo è il motivo per cui il BCHR è per lo più una sciocchezza come predittore dell'efficienza del sistema.