sql >> Databasteknik >  >> RDS >> Oracle

När man ska använda tips i oracle-fråga

De flesta tips är ett sätt att kommunicera vår avsikt till optimeraren. Till exempel den leading antydan du nämner betyder ansluta tabeller i denna ordning . Varför är detta nödvändigt? Ofta beror det på att den optimala sammanfogningsordningen inte är uppenbar, för att frågan är dåligt skriven eller att databasstatistiken är felaktig.

Så en användning av tips som leading är att ta reda på den bästa exekveringsvägen och sedan ta reda på varför databasen inte väljer den planen utan tipset. Löser problemet med att samla in färsk statistik? Löser omskrivningen av FROM-satsen problemet? Om så är fallet kan vi ta bort tipsen och distribuera den nakna SQL.

Ibland finns det tillfällen då vi inte kan lösa denna gåta och måste behålla tipsen i produktionen. Detta bör dock vara ett sällsynt undantag. Oracle har haft många mycket smarta människor som arbetat med den kostnadsbaserade optimeraren i många år, så dess beslut är vanligtvis bättre än våra.

Men det finns andra tips som vi inte skulle blinka för att se i produktion. append är ofta avgörande för att trimma bulkskär. driving_site kan vara avgörande för att ställa in distribuerade frågor.

Omvänt missbrukas nästan alltid andra tips. Ja parallel , Jag pratar om dig. Blind sätta /*+ parallel (t23, 16) */ kommer förmodligen inte att få din fråga att köras sexton gånger snabbare, och inte sällan kommer det att resultera i långsammare hämtning än en entrådad exekvering.

Så, kort sagt, det finns inga universella råd om när vi bör använda tips. De viktigaste sakerna är:

  1. förstå hur databasen fungerar, och särskilt hur den kostnadsbaserade optimeraren fungerar;
  2. förstå vad varje ledtråd gör;
  3. testa antydda frågor i en korrekt inställningsmiljö med produktionsekvivalenta data.

Det bästa stället att börja är uppenbarligen Oracle-dokumentationen . Men om du känner för att spendera lite pengar, Jonathan Lewis bok om den kostnadsbaserade optimeraren är den bästa investeringen du kan göra.



  1. Hur dödar du alla nuvarande anslutningar till en SQL Server 2005-databas?

  2. Flera fördröjda replikeringsslavar för katastrofåterställning med låg RTO

  3. SQL Server FOR XML Path gör repeterande noder

  4. Varför får jag HTML i min MySQL-export till CSV?