Semantisk DBMS-forespørgselsoptimering er processen med at validere og transformere forespørgselssyntakstræet til en form, der er egnet til yderligere optimeringstrin.
På dette stadium udføres følgende:
Forespørgsler kanoniseres, dvs. omskrives til at indeholde det mindste antal SELECT-sætninger (join-filter-projektion). Hvor det er muligt, skal forespørgslen reduceres til form af en enkelt SELECT-sætning. Dette kan tillade efterfølgende optimeringsfaser at generere en meget mere effektiv (med 2-3 størrelsesordener) eksekveringsplan for komplekse forespørgsler.
Visningsudvidelse bruges således, at den endelige forespørgsel kun indeholder referencer til materialiserede relationer (tabeller), og det er muligt at anvende datapipelinebehandling.
oprindelige anmodning | Resultat |
---|---|
vælg a fra V hvor kond2
hvor V som vælger a, b fra T hvor cond1 |
vælg a fra T hvor (kond1 og cond2) |
Konvertering af underforespørgsler til joins er nødvendigt for at anvende datapipelinebehandling og minimere mængden af underforespørgselsresultater, der akkumuleres i midlertidig disk eller RAM.
oprindelige anmodning | Resultat |
---|---|
vælg distinkt Ta fra T hvor Tb er (vælg T1.b fra T1 hvor T1.c < Tc) | vælg distinkt Ta fra T,T1 hvor Tb = T1.b og T1.c < Tc |
oprindelige anmodning | Resultat |
---|---|
(A forbinder B), hvor condA og condB | (A hvor condA) join (B hvor condB) |
Det udføres ved at konvertere træet af logiske operationer til CNF og forenkle den resulterende logiske funktion.
Transformationen af træet af logiske operationer til CNF udføres som følger:
Transformationen fortsætter rekursivt, indtil træet består af konjunktioner af bestanddelen 0 .
Den resulterende booleske funktion er i konjunktiv normal form , men er overflødig. For forenklings skyld anvendes logiske funktionsoptimeringsmetoder, såsom Espresso (Logic) eller Quine-McCluskey .
Prædikatfordeling udføres
AB forud for C
som der er et prædikat for
AB=DE
Som et resultat får vi prædikatet
DB præd C
hvor C er en konstant; A,D - relationer; B,E - sammenlignede attributter. Denne forenkling er baseret på den antagelse, at det oprindelige prædikat AB pred C kan være mere effektivt for relation D.
AB præd DE
den omvendte tilstand genereres
DE omvendt præ AB
for at kunne tilsluttes i omvendt rækkefølge.
Efter forenkling af betingelsestræet er hver konjunktion i træet en hentesti. Prædikater inden for ledsætninger er grupperet efter relation. For at opnå det endelige resultat er det nødvendigt at kombinere resultaterne af hver af prøvetagningsvejene.