Semantisk DBMS-frågeoptimering är processen att validera och omvandla frågesyntaxträdet till en form som lämpar sig för ytterligare optimeringssteg.
I detta skede utförs följande:
Frågor kanoniseras, det vill säga skrivs om för att innehålla det minsta antalet SELECT-satser (join-filter-projection). Där det är möjligt bör frågan reduceras till formen av en enda SELECT-sats. Detta kan tillåta att efterföljande optimeringsfaser genererar en mycket effektivare (med 2-3 storleksordningar) exekveringsplan för komplexa frågor.
Vyexpansion används så att den slutliga frågan endast innehåller referenser till materialiserade relationer (tabeller) och det är möjligt att använda datapipelinebearbetning.
ursprungliga begäran | Resultat |
---|---|
välj a från V där cond2
där V väljer a, b från T där cond1 |
välj ett från T där (cond1 och cond2) |
Att konvertera subqueries till joins är nödvändigt för att tillämpa datapipeline-bearbetning och minimera mängden subquery-resultat som samlas på temporär disk eller RAM.
ursprungliga begäran | Resultat |
---|---|
välj distinkt Ta från t där Tb in (välj T1.b från T1 där T1.c < Tc) | välj distinkt Ta från T,T1 där Tb = T1.b och T1.c < Tc |
ursprungliga begäran | Resultat |
---|---|
(A sammanfogar B) där condA och condB | (A där condA) join (B där condB) |
Det utförs genom att konvertera trädet av logiska operationer till CNF och förenkla den resulterande logiska funktionen.
Omvandlingen av trädet för logiska operationer till CNF utförs enligt följande:
Transformationen fortsätter rekursivt tills trädet består av konjunktioner av beståndsdelen 0 .
Den resulterande booleska funktionen är i konjunktiv normal form , men är redundant. För förenkling används logikfunktionsoptimeringsmetoder, såsom Espresso (Logic) eller Quine-McCluskey .
Predikatfördelning görs
AB pred C
som det finns ett predikat för
AB=DE
Som ett resultat får vi predikatet
DB pred C
där C är en konstant; A,D - relationer; B,E - jämförda attribut. Denna förenkling är baserad på antagandet att det ursprungliga predikatet AB pred C kan vara mer effektivt för relation D.
AB pred DE
det omvända tillståndet genereras
DE omvänd pre AB
för att kunna ansluta i omvänd ordning.
Efter att ha förenklat villkorsträdet är varje konjunktion i trädet en hämtningsväg. Predikat inom konjunktioner är grupperade efter relation. För att erhålla det slutliga resultatet är det nödvändigt att kombinera resultaten från var och en av provtagningsvägarna.