2. Implementáció
2.2. Optimizálási algoritmusok. Optimizáló
2.2.6. Összefoglaló megjegyzések
A megvizsgált algoritmusok néhány közös gondolatot - módszert, észrevételt - tartamaznak. Ezeket nézzük végig még egyszer, megfigyelve, hogy az egyes algoritmusoknál mi
képp bukkannak fel az azonos ötletek. Szolgálhat némi tanul
sággal programozástechnikai - implementációs megoldások vizs gálata is.
Jól láthatóan /az algoritmusok alapján/ érdemes relá
cióalgebrai terminológiát használni. A nem relációalgebrai nyelveknél is világos, hogy melyikben mit jelent a pro
jekció, korlátozás, és az illesztés. Mivel a relációalgeb
ra a legprocedurálisabb, a gép számára is a relációalgebra interface a legkönnyebben érthető, és az optimizálási al
goritmusoknak is kiindulópontot ad, atomi műveleteivel, melyek sorozata alkotja a lekérdezést.
A Chang-Smith algoritmus fogalmazta meg az egyváltozós korlátozások mielőbbi elvégzésének és összevonásának elvét.
Előnyei nyilvánvalóak: minél korábban érdemes a manipulá
landó reláció méretét csökkenteni, és egy relációba tarto
zó feltételeket nem érdemes a reláció többszöri végigolva- sásával ellenőrizni. Nézzük meg ennek az elvnek a megvaló
sulását és módosulásait az egyes algoritmusoknál!
A Palermo algoritmus minden reláción csak egyszer megy végig, tehát az egy relációba tartozó feltételeket a lekér
dezésben elfoglalt pozíciójuktól függetlenül egyszerre elle
nőrzi. Ügyes implementáció - az ismertetett LIDAS-ban erre nincs utalás, de feltételezzük, hogy ilyen - az értéklista készítésénél kihasználja az indexet /ha van/. Az egyválto
zós korlátozások illesztés előtti elvégzését jelenti, hogy a párlisták építésénél adott konjunkcióban lévő egyváltozós korlátozásokat figyelembe veszi.
A TID algoritmusnál is érvényesül ez az elv. Az
egy-(
változós korlátozások kitüntetett szerephez jutnak /Pl és P2 tipusu feltételek/, és noha az algoritmus index-középpor-~
tusága miatt elsősorban a Pl-eket tudja jól felhasználni, a P3,P4,P5 feltételek /ezek jelentik az illesztést/ fel
dolgozása előtt a belső blokkban előbb a Pl, majd a P2 tipusuak is kiértékelésre kerülnek.
Mindennek ellenére lehet olyan lekérdezést Írni, ahol ez az elv csorbát szenved. Az alábbi lekérdezés azoknak a pozitív hősöknek a nevét Írja ki, akik 1-nél több dolgozót foglalkoztató részlegekben dolgoznak /2.2.1.
adatbázisát használjuk/:
SELECT NÉV
FROM D IN DOLGOZÓ
WHERE BESOROLÁSÉ POZITÍV HŐS' AND RÉSZLEGKÓD IN
SELECT RÉSZLEGKÓD FROM R IN RÉSZLEG WHERE 1 >
SELECT COUNT (x) FROM DOLGOZÓ
WHERE RÉSZLEGKÓD=R.RÉSZLEGKÓD Ennél a lekérdezésnél az algoritmus ha a külső blokk feltételeinél a "Besorolás"-t tartalmazót P2 típusúnak /nincs index "Besorolás"-ra/, a "Részlegkód"-ot tartal
mazót pedig Pl-nek találja, akkor lefelé haladva elvég
zi a Részleg és Dolgozó relációk illesztését, anélkül, hogy a Részleg sorait a "Besorolás"-ra vonatkozó felté
tel korlátozná /mint az pl. a Palermo-algoritmusnál meg
történhet/. Persze nyilvánvaló, hogy ezt a lekérdezést egyszerűbben is meg lehet Írni SEQUEL-ben, oly módon, hogy a korlátozást hajtsa végre előbb az algoritmus.
A PRTV algoritmusát leiró ÜHALL 76] cikk két fontos megjegyzést tesz evvel az elvvel kapcsolatosan: nem mindig
lehet az illesztés előtt korlátozni, és nem is mindig ér
demes. Az előbbit természetesen minden algoritmus figyelem
be veszi, az utóbbit nem, ugyanis annak eldöntése, hogy mi
kor érdemes, mikor nem, nehezen becsülhető. Az SQL/DS algo
ritmus, mely a rendszer által vezetett statisztikákon ala
pul, tudj a talán ezt a becslést legjobban elvégezni, és en
nek alapján választani az optimális illesztés-korlátozási- projekció algoritmust.
Az INGRES ÜSTÖN 76] algoritmusa elsőnek az egyváltozós korlátozásokat hajtja végre /már ha lehet, és az OR-ok ezt nem teszik lehetetlenné/. A módosított ÜWONG 76] algoritmus már azt emliti, hogy csak akkor érdemes ezt megtenni, ha a korlátozásban szereplő változó valószinüleg helyettesitésre kijelölt. /A helyzet azért bonyolult, mert a korlátozás ered
ményétől függ, hogy kij.elöljük-e a változót helyettesitésre./
Az SQL/DS algoritmusa az egyváltozós korlátozások mi
előbbi elvégzésének elvét tulajdonképpen igen kritikusan szem
léli, és pl. tBLAS 77] négy algoritmusából is kiderül, hogy ennek az elvnek az érvényessége - legalábbis az SQL/DS fizikai szervezése mellett - nagymértékben függ a lehetséges elérési utaktól.
A Chang-Smith algoritmus projekcióra vonatkozó elve en
nél egyszerűbb és nyilvánvalóbb. Kisebb méretű /sorhosszuságu/
relációkkal kényelmesebb dolgozni, ésszerűtlen lenne a feles
leges adatot cipelni. Az algoritmusok általában - ésszerűen - úgy értelmezik ezt az elvet, hogy le kell vágni a szükségte
len adatmezőket, de a duplikátumok eltávolításával /ami ren
dezést jelent/ nem foglalkoznak. Érdemes megemlíteni még, hogy a sorazonositóval dolgozó algoritmusok /Palermo, TID, CBLAS 77] 4. számú/ szempontjából ennek az elvnek nyilván
nincs jelentősége.
Az INGRES filozófiában alapvető szerep jut a helyette
sítendő változó kijelölésének, C.WONG 76] bonyolult algorit
musokat javasol /nem tudjuk, hogy implementálta-e valame
lyiket az INGRES/. CSTON 76j egyszerűen azt a változót he
lyettesíti, mely az egyváltozós korlátozások elvégzése után legkisebbé vált reláción van értelmezve.
A Palermo-algoritmus ilyen szempontból még egyszerűbb stratégiával dolgozik. Mindig azt a változót helyettesíti, amelyik a legkisebb reláción van értelmezve /az egyválto
zós lekérdezések figyelembe vétele nélkül/. tWONG 763 ez ellen több érvet is felhoz /ld. 2.1.4./
A Chang-Smith és a PRTV algoritmus a relációalgebrai interface miatt adott sorrendű műveleteket kapnak, a fát módositó algoritmus illesztési sorrendek felcserélésével nem foglalkozik /ilyen szempontból hátrány a relációalgebra nyelv/. Igaz viszont, hogy az illesztési algoritmus egy megadott készletből történő választása a helyettesítendő változó kijelölését /is/ jelenti.
A TID algoritmus a SEQUEL nyelv szerkezete miatt nem foglalkozik a helyettesítendő változó kijelölésével, hi
szen azt az egymásba ágyazott blokkok sorrendje eleve - nem feltétlenül célszerűen - meghatározza.
■ Az SQL/DS statisztikai becslések alapján keresi a he
lyettesítések optimális sorrendjét.
A programozástechnikai megoldások közül kiemelkedő fontosságú a rekurzió. Ez érthető, hiszen a módszerek ál
talában egyváltozós lekérdezésekre vezetik vissza a több
változósakat, lépésenként csökkentve a változók számát.
Ezt egészen pontosan láttuk a TID és a dekompoziciós al
goritmusnál. A Palermo-algoritmusra ez nem igaz, ez inkább változónként egyszerű ciklust használó algoritmusnak tűnik.
A Chang-Smith algoritmusnál és az SQL/DS algoritmusnál a
felépített fák bejáráshoz, transzformálásához kell a rekurzió.
Mindenesetre célszerűnek látszik rekurziót biztositó ma- gasszintü nyelven megirni az Optimizálót. /Ez is a gya
korlat, hiszen: LIDAS-MODULA-2, TID és SQL/DS-PL/1, INGRES-C/.
Az implementációs eltérések közül kiemelkedően fontos
nak tartjuk a "forditóprogram" megoldást /nem csak mi, rendszer alkotói isUCHAM 8ll/. Az előnyeiről volt már szó, most a hárányait emlitjük:
a kódgeneráláshoz szükséges többletidő*
• az Adatkezelő Modulok tárolásához szükséges lemez
terület .
CCHAM 81 ál (szerint a kódgenerálási többletidő méréseik
szerint általában az optimizáláshoz szükséges idő 1/3 része, egy-egy Adatkezelő Modul pedig 1000-1500 byte-ot foglal le.