Semantisk optimering af DBMS-forespørgsler

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 30. september 2021; checks kræver 5 redigeringer .

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:

  1. Konverter forespørgsler til kanonisk form;
    1. Afslørende synspunkter;
    2. Konverter underforespørgsler til joinforbindelser;
    3. Afstamning af prædikater
  2. Forenkling af betingelser og fordeling af prædikater;
  3. Konvertering af et betingelsestræ til en udvælgelsessti.

Konvertering af forespørgsler til kanonisk form

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.

Udvidelse af visninger

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 joinforbindelser

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

Prædikat afstamning

oprindelige anmodning Resultat
(A forbinder B), hvor condA og condB (A hvor condA) join (B hvor condB)

Forenkling af betingelser og fordeling af prædikater

Forenkling af betingelser

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:

  1. For alle disjunktioner, der er inkluderet i direkte form, anvendes fordelingsloven:
P OR (Q OG R) = (P ELLER Q) OG (P OR R) (P OG Q) ELLER R = (P ELLER R) OG (Q ELLER R)
  1. For alle disjunktioner, der vises i omvendt form, gælder de Morgans regel :
IKKE (P ELLER Q) = IKKE P OG IKKE Q

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 .

Fordeling af prædikater

Prædikatfordeling udføres

  1. for alle prædikater af formen:

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.

  1. for hver visningssammenføjningsbetingelse:

AB præd DE

den omvendte tilstand genereres

DE omvendt præ AB

for at kunne tilsluttes i omvendt rækkefølge.

Konvertering af et betingelsestræ til en hentesti

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.

Se også

Litteratur