sql >> Database >  >> RDS >> Oracle

Verborgen functies in Oracle

"Full table scans zijn niet altijd slecht. Indexen zijn niet altijd goed."

Een op index gebaseerde toegangsmethode is minder efficiënt bij het lezen van rijen dan een volledige scan wanneer u deze meet in termen van rijen die zijn geopend per werkeenheid (meestal per logische lezing). Veel tools zullen een volledige tabelscan echter interpreteren als een teken van inefficiëntie.

Neem een ​​voorbeeld waarbij u een paar honderd facturen uit een factuurtabel leest en een betalingsmethode opzoekt in een kleine opzoektabel. Het gebruik van een index om de opzoektabel voor elke factuur te doorzoeken, betekent waarschijnlijk drie of vier logische io's per factuur. Een volledige scan van de opzoektabel ter voorbereiding van een hash-join van de factuurgegevens zou echter waarschijnlijk slechts een paar logische leesbewerkingen vergen, en de hash-join zelf zou vrijwel kosteloos in het geheugen worden opgeslagen.

Veel tools zouden hier echter naar kijken en "full table scan" zien en u vertellen om te proberen een index te gebruiken. Als je dat doet, heb je je code misschien net ontstemd.

Overigens zorgt te veel vertrouwen op indexen, zoals in het bovenstaande voorbeeld, ervoor dat de "Buffer Cache Hit Ratio" stijgt. Daarom is de BCHR meestal onzin als voorspeller van systeemefficiëntie.



  1. PostgreSQL:PostgreSQL-database verwijderen via de opdrachtregel

  2. Waarom primaire sleutels belangrijk zijn en hoe u er een kiest?

  3. Waarom u PHP's PDO zou moeten gebruiken voor databasetoegang

  4. Verwerking van gelijktijdige updates in de slaapstand