sql >> Databasteknik >  >> RDS >> Oracle

Hur tolkar du en frågas förklara plan?

Jag ryser när jag ser kommentarer om att fullständiga tabellskanningar är dåliga och att indexåtkomst är bra. Fullständiga tabellskanningar, indexomfångsskanningar, snabba fullindexskanningar, kapslade loopar, merge join, hash joins etc. är helt enkelt åtkomstmekanismer som måste förstås av analytikern och kombineras med kunskap om databasstrukturen och syftet med en fråga i för att nå någon meningsfull slutsats.

En fullständig genomsökning är helt enkelt det mest effektiva sättet att läsa en stor del av blocken i ett datasegment (en tabell eller en tabell (under)partition), och även om det ofta kan indikera ett prestandaproblem, är det bara i sammanhanget av om det är en effektiv mekanism för att uppnå målen för frågan. På tal som datalager och BI-kille är min främsta varningsflagga för prestanda en indexbaserad åtkomstmetod och en kapslad loop.

Så för mekanismen för hur man läser en förklarande plan är Oracle-dokumentationen en bra guide:http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009

Läs igenom Performance Tuning Guide också.

Googla också på "kardinalitetsfeedback", en teknik där en förklarande plan kan användas för att jämföra uppskattningarna av kardinalitet i olika stadier i en fråga med de faktiska kardinaliteter som upplevs under utförandet. Wolfgang Breitling är författaren till metoden, tror jag.

Så, slutsatsen:förstå åtkomstmekanismerna. Förstå databasen. Förstå avsikten med frågan. Undvik tumregler.



  1. Hur man skapar en totalrad i Access

  2. När det är akut

  3. Hur LN() fungerar i MariaDB

  4. Konvertera 'datetimeoffset' till 'datetime2' i SQL Server (T-SQL-exempel)