De fleste tip er en måde at kommunikere vores hensigt til optimizeren. For eksempel den leading
hint du nævner betyder tilslut tabeller i denne rækkefølge . Hvorfor er dette nødvendigt? Ofte er det fordi den optimale joinrækkefølge ikke er indlysende, fordi forespørgslen er dårligt skrevet eller databasestatistikken er unøjagtig.
Så én brug af hints såsom leading
er at finde ud af den bedste udførelsesvej, og derefter finde ud af, hvorfor databasen ikke vælger den plan uden hint. Løser indsamling af frisk statistik problemet? Løser omskrivning af FROM-klausulen problemet? Hvis det er tilfældet, kan vi fjerne hints og implementere den nøgne SQL.
Nogle gange er der tidspunkter, hvor vi ikke kan løse denne gåde, og er nødt til at beholde hints i produktionen. Dette burde dog være en sjælden undtagelse. Oracle har haft masser af meget kloge folk, der arbejder på den omkostningsbaserede optimeringsmaskine i mange år, så dets beslutninger er normalt bedre end vores.
Men der er andre hints, vi ikke ville blinke for at se i produktion. append
er ofte afgørende for tuning af bulkinserts. driving_site
kan være afgørende for tuning af distribuerede forespørgsler.
Omvendt bliver andre hints næsten altid misbrugt. Ja parallel
, jeg taler om dig. Blindt sætte /*+ parallel (t23, 16) */
vil sandsynligvis ikke få din forespørgsel til at køre seksten gange hurtigere, og vil ikke sjældent resultere i langsommere hentning end en enkelt-trådet udførelse.
Så kort sagt er der ingen universelt anvendelige råd til, hvornår vi skal bruge hints. De vigtigste ting er:
- forstå, hvordan databasen fungerer, og især hvordan den omkostningsbaserede optimizer fungerer;
- forstå, hvad hvert tip gør;
- Test antydede forespørgsler i et korrekt tuning-miljø med produktionsækvivalente data.
Det bedste sted at starte er naturligvis Oracle-dokumentationen . Men hvis du har lyst til at bruge nogle penge, kan Jonathan Lewis bog om den omkostningsbaserede optimeringsværktøj a> er den bedste investering, du kan foretage.