D B. Kyselyjen käsittely ja optimointi. Kyselyjen käsittely ja optimointi

Samankaltaiset tiedostot
Helsingin yliopisto/tktl Tietokannan hallinta, s Harri Laine 1 D B. Kyselyjen käsittely ja optimointi

Kyselyiden käsittely. R & G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Helsingin yliopisto/tktl Kyselykielet, s 2006 Tietokantaoperaatioiden toteutuksesta Harri Laine 1. Kyselyjen käsittely

D B. Kyselyjen käsittely ja optimointi. Kyselyn käsittelyn vaiheet:

Helsingin yliopisto/tktl Kyselykielet, s 2006 Optimointi Harri Laine 1. Kyselyn optimointi. Kyselyn optimointi

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

D B. Tietokannan hallinta kertaus

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

Tiedostorakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

Relaatioalgebra. Kyselyt:

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

Helsingin yliopisto/tktl Kyselykielet, s 2006 Tietokantaoperaatioiden toteutuksesta Harri Laine 1. Tiedostorakenteet.

3. Tietokannan hakemistorakenteet

3. Tietokannan hakemistorakenteet

12. Javan toistorakenteet 12.1

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

Yksitasoisia talletusrakenteita käytetään lähinnä datatietueiden talletukseen

11. Javan toistorakenteet 11.1

12. Javan toistorakenteet 12.1

SELECT-lauseen perusmuoto

Helsingin yliopisto/tktl Tietokannan hallinta kevät Harri Laine 1 D B. Yksitasoiset talletusrakenteet

Kyselyn yleisrakenne:

4. Kyselyjen käsittely ja optimointi

HELIA 1 (15) Outi Virkki Tiedonhallinta

joukko operaatioita, joilla relaatioista voidaan muodostaa uusia relaatioita joukko opin perusoperaatiot yhdiste, erotus, ristitulo, leikkaus

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

4. Kyselyjen käsittely ja optimointi

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

CSE-A1200 Tietokannat

D B. Kyselypuut ja ekvivalenssi

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

B-puu. 3.3 Dynaamiset hakemistorakenteet

Helsingin yliopisto/ tktl DO Tietokantojen perusteet, s 2000 Relaatioalgebra Harri Laine 1. Relaatioalgebra

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Käsitellyt hakemistot (hajautus, ISAM): hakemisto-osa on staattinen eli ei muutu muuten kuin uudelleenorganisoinnissa.

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

Tietokanta (database)

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

Helsingin yliopisto/ tktl D Tietokantojen perusteet, s 2000 Relaatioalgebra. Harri Laine 1. Relaatioalgebra.

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

Ohjelmoinnin perusteet Y Python

Relaation tyhjyyden testaaminen

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Algoritmit 1. Demot Timo Männikkö

HELIA 1 (14) Outi Virkki Tiedonhallinta

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Yhdiste, leikkaus, erotus ym.

Yhdistäminen. Tietolähteen luominen. Word-taulukko. Joukkokirje, osoitetarrat Työvälineohjelmistot 1(5)

Lisätään avainarvo 1, joka mahtuu lehtitasolle:

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Algoritmit 1. Luento 11 Ti Timo Männikkö

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi

Algoritmit 1. Luento 1 Ti Timo Männikkö

Luento 2: Tiedostot ja tiedon varastointi

OUTER JOIN se vanha kunnon kaveri

Algoritmit 1. Luento 5 Ti Timo Männikkö

Esimerkki. pankkien talletus- ja lainatietokanta: Yhdiste, leikkaus, erotus ym. Leikkaus (intersect) Yhdiste (Union) Erotus (except/minus) Leikkaus

Algoritmit 1. Demot Timo Männikkö

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

Algoritmit 2. Luento 6 Ke Timo Männikkö

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2006 Tietokantaoperaatioiden toteutuksesta 3. Harri Laine 1

Kuva 7.2 vastaustaulu harjoitukseen 7.2

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää

Helsingin yliopisto /TKTL Tietokannan hallinta Harri Laine 1 D B. Harvat hakemistot. Harvat hakemistot

SQL:N PERUSTEET MARKKU SUNI

Hajautusrakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

D B. Harvat hakemistot. Harvat hakemistot

Ohjelmoinnin perusteet Y Python

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Sisällys. 16. Lohkot. Lohkot. Lohkot

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

Hajautusrakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet

Algoritmit 2. Luento 5 Ti Timo Männikkö

Hakemistotyypeistä. Hakemistorakenteet. Hakemiston toteutuksesta. Hakemiston toteutuksesta

Hakemistorakenteet. R & G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Ohjelmoinnin perusteet Y Python

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

SYÖTTÖPOHJA LUKUJEN SYÖTTÖÖN ERI TARKOITUKSIIN

811120P Diskreetit rakenteet

Tietorakenteet ja algoritmit - syksy

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

D B. Harvat hakemistot

Tarkennamme geneeristä painamiskorotusalgoritmia

Rinnakkaistietokoneet luento S

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

Ohjelmoinnin perusteet Y Python

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

4.3. Matemaattinen induktio

Transkriptio:

Kyselyn käsittelyn vaiheet: TKHJ ottaa vastaan kyselyn asiakasohjelmalta Kysely selataan ja jäsennetään tarkistetaan kyselyn rakenteellen oikeellisuus Jäsennetty kysely muunnetaan relaatiolausekkeiksi ja tallennetaan sisäisessä esitysmuodossa kyselypuuna Laaditaan kyselyn toteutussuunnitelma suunnitelman laadtaan liittyy valtaa eri toteutusvaihtoehtojen välillä optimotia Suoritetaan kysely suunnitelman mukaisesti Toimitetaan tulokset asiakasohjelmalle Miksi optimoidaan SQL-kysely määrittää halutun tuloksen, ei sitä miten tulos muodostetaan (deklaratiiven kyselykieli) useimmissa oliokannoissa kysely etenee navigoimalla proseduraalisesti eli ohjelmoija kontrolloi kyselyn toteutustapaa, sillo ohjelmoijan pitää osata valita oikea tapa Valitut tiedostorakenteet vaikuttavat siihen, miten operaatio kannattaa suorittaa Taulujen koko ja arvojen jakautumat muuttuvat jatkuvasti, tämä saattaa vaikuttaa siihen, miten kysely kannattaa toteuttaa 1 2 Kyselyn optimoti ei ole todellista matemaattista optimotia tarkoitus ei ole löytää parasta vaan riittävän hyvä parhaan etsimen on laskennallisesti raskasta taustatietoja ei yleensä ole riittävästi parhaan valtaan Myös SQL:ssä käyttäjä voi jonk verran vaikuttaa kyselyn suoritustapaan monissa SQL-murteissa käyttäjä voi liittää kyselyyn vihjeitä siitä, miten kysely pitäisi käsitellä kyselyn esittämistapa voi myös vaikuttaa, esim. jos taululla on deksi sarakkeen Nimi perusteella Nimi like Vir% käyttää deksiä, mutta upper(nimi) like VIR% ei käytä Kyselyn optimon periaatteet Heuristen optimoti (sääntöpohjaen optimoti) käytössä on joukko sääntöjä, joiden mukaisesti operaatiot järjestetään tai suoritustavat valitaan valnat ennen liitoksia käytä deksiä aa kun mahdollista jne säännöt ovat yleiskäyttöisiä suoritustapa ei välttämättä ole optimaalen 3 4 Kyselyn optimon periaatteet Kustannuslaskentaoptimoti (tilastollen optimoti) laaditaan vaihtoehtoisia suunnitelmia, esim. sääntöpohjalta lasketaan vaihtoehdoille kustannukset valitaan edullis edellyttää tilastoaeistoa ja sen uudistamista ajoitta SQL-kyselyn voi ajatella muodostuvat joukosta kyselylohkoja (query block) (select from where lohko) yksi kyselylohko muodostaa kokonaisuuden, jonka suoritus voidaan suunnitella erikseen select lname, fname from employee kaksi kyselylohkoa where salary >= (select max(salary) from employee where dno=5); 5 6

Kyselylohkot muunnetaan relaatioalgebran lausekkeiksi Lohko 1: π lname,fname (σ salary>c (employee)), Lohko 2: F max salary (σ dno=5 (employee)) F on laajennetun relaatioalgebran funktiooperaatio, tarvitaan esim. yhteenvetofunktioissa, ryhmittelyssä jne. Relaatioalgebran operaatioiden suoritukseen on useita vaihtoehtoja Vaihtoehtojen tehokkuus vaihtelee Tehokkuuden ensisijaisena kriteerä tarvittavien levyoperaatioiden lukumäärä luettaessa relaatioiden osia levyltä kirjoitettaessa operaation tulosta levylle tulos on joko välitulos tai lopputulos 7 8 Välitulosten kirjoittamisen (ja edelleen lukemisen) kustannus voidaan use jättää huomioimatta, jos tkhj käyttää putkitekniikkaa: (pipelg) operaation tulosjono ohjataan toisen syöttöjonoksi, jollo levylle kirjoitusta ei tapahdu Operaation tulosjono ohjataan toisen syöttöjonoksi, jollo levylle kirjoitusta ei tapahdu dataa siirtyy rivi kerrallaan ja vastaanottaja voi heti käsitellä syötettään valta projektio valta projektio 9 10 Monet tietokantaoperaatiot (muutk ku order by) edellyttävät tietueiden järjestämistä group by, relaatiomall mukaen projektio (select distct) yhdiste erotus järjestämen voi luovuttaa ensimmäisen tulosriv eteenpä vastaa vastaanotettuaan viimeisen Jos käsiteltävät rivijoukot ovat isoja tarvitaan ulkoista järjestämistä (external sortg) Ulkoisessa järjestämisessä käytetään yleisesti ns. lomitusjärjestämistä (merge sort): Tiedosto luetaan osa keskusmuisti (osien koon määrää järjestämiseen käytettävissä olevan keskusmuist määrä) Järjestetään kuk osatiedosto keskusmuistissa (esim. quicksort) Kirjoitetaan järjestetty osatiedosto (run, jono) levylle. Tehdään lomituskierroksia tarpeellen määrä, jotta jäljellä on va yksi järjestetty osatiedosto 11 12

Lomituskierros: Luetaan tietueita m (m 2) järjestetystä jonosta (osatiedostosta) - lukua m kutsutaan lomitusasteeksi Lomitetaan tiedostot eli kirjoitetaan yhtä järjestettyä tulostiedostoa kirjoitetaan avaimeltaan pien jonojen vuorossa olevista tietueista tulosjonoon ja edetään tämän jonossa Järjestettyjen osatiedostojen pituudet kasvavat kierroksella m-kertaiseksi. Jos jonoja (osatiedostoja) oli alunper n, tarvitaan lomituskierroksia roof(log m n) 13 Oletetaan, että järjestämiseen on käytettävissä puskuritilaa 129*4KB (vähän yli 0.5MB). Tiedoston koko olkoon 2048 sivua= 8MB Alkuperäiseen järjestämiseen voidaan käyttää 128 syöttöpuskuria ja 1 tulospuskuri, joten saadaan 128 sivun pituisia järjestettyjä jonoja 16 kappaletta. Näiden järjestämen hoituu 1 lomituskierroksella - 16 asteen lomitus. Yhdellä lomituskierroksella selvittäisi tällä puskurimäärällä 128*128*4KB (64MB) kokoisesta tiedostosta 14 Kullak kierroksella kaikki sivut luetaan ja kirjoitetaan. Olkoon tiedoston koko N sivua ja muistitilaa käytettävissä B sivua. Levyoperaatioita tarvitaan tällö 2N+2N*roof(log B-1 roof(n/(b-1))) levyoperaatiot peräkkäiskäsittelyä lomituksesta on olemassa erilaisia muunnelmia esim. muistitilan käytön suhteen, esim. kaksoispuskuronilla voidaan vähentää jonotusaikoja (toisi puskureih luetaan kun toisia käsitellään), mutta B puolittuu ja levyoperaatioiden määrä kasvaa vaikka kokonaisaika väheneek Valta: select * from R where A op value σ A op value (R) Valnan vaihtoehdot riippuvat valtaehdosta ja käytössä olevista tiedostorakenteista 15 16 Tiedoston läpikäynti (scan) soveltuu aa käytettävä jos sarake A ei ole mukana missään deksissä eikä tiedosto ole sarakkeen A:n perusteella järjestetty sarake A on jonk funktion argumentta, esim. upper(a), myös substrg(a,1,x)? voi hyödyntää peräkkäiskäsittelyä Bäärihaku (bary search) soveltuu, jos tiedosto on järjestetty sarakkeen A perusteella etsitään ensimmäen ehdon täyttävä, josta voidaan jatkaa eteenpä voi hyödyntää peräkkäishakua vasta ensimmäisen ehdon täyttävän löytymisen jälkeen 17 18

Indeksihaku (dex scan) soveltuu, jos käytössä on hakusarakkeeseen perustuva deksi pelkästään hakusarake hakusarakealkuen deksotiperusta hakusarake mukana deksissä tämäk saattaa olla käyttökelpoen edellyttää koko hakemiston läpikäyntiä, mutta toimii jos hakemisto on pieni suhteessa tiedostoon ja hakuehto on hyv rajaava (selective) = jäljittää pienen tietuejoukon, Valtaehto muodostuu ja ( ) ja tai ( ) operaatioilla yhdistetyistä alkeisehdoista. Ehdon konjunktiiven normaalimuoto (conjunctive normal form) tarkoittaa, että ehto esitetään tai operaatioilla yhdistettyä konjunktioa: (e 1 e 2... e n ) (e m... e p )... 19 20 Konjunktiota (e 1 e 2... e n ) evaluoitaessa ei riitä, että jok ehdoista täyttyy vaan kaikkien pitää täyttyä. Jos joillak ehdoissa olevista sarakkeista on deksit näitä pyritään käyttämään: valitsemalla eniten rajaava deksi, ja tutkimalla sen jälkeen tietueista muut ehdot, tai muodostamalla hakemistojen leikkaus ja tutkimalla leikkausjoukon tietueista ne ehdot, joita ei voida ratkaista deksien perusteella tämä ratkaisu edellyttää tietueosoitteita leikkausjoukon muodostamiseksi jäljitetyt osoitelistat järjestetään osoitteen perusteella ja lomitetaan Huom: tietueosoitteessa alussa sivuosoite. Olkoon taululle työntekijä määritelty deksi sekä sukunimen että kotiosoitteen perusteella. Tällö select * from työntekijä where sukunimi= Löpönen and kotiosoite= Teollisuuskatu 23 B446, Helski voitaisi toteuttaa valitsemalla rajaavampi deksi (kotiosoite), ja tutkimalla tietueet keskimäär vähän yli 1 (olisi tässä parempi vaihtoehto koska osoite on hyv rajaava), tai hakemalla kummank deks perusteella (keskimäär 30 ja 1+) ja muodostamalla näiden leikkaus. On tässä tapauksessa huonompi, mutta jos kumpikaan deksi ei ole kov tiukasti rajaava (vaikkapa kurssikoodi ja opiskelijanumero ilmoittautumistiedoissa), ni niiden leikkaus voi olla silti hyv pieni) 21 22 Disjunktiivisen ehdon e 1...v e n tulos vastaa erillisillä ehdoilla e 1 e n saatujen rivijoukkojen yhdistettä. Koko tiedosto on käytävä läpi, jos yksik ehdoista perustuu sarakkeeseen, jolle ei ole deksiä Projektiolla on kaksi tehtävää sarakkeiden poimta ja toistuvien vastausrivien karsta SQL-kyselyissä toistuvia rivejä ei välttämättä haluta karsia (kyselyssä ei DISTINCT-määrettä) Sarakkeiden poimta on suoraviivaista otetaan tietueesta va ne sarakkeet, jotka on lueteltu projisoitaviksi jos kaikki luetellut sarakkeet löytyvät hakemistosta ei varsaisia datarivejä tarvitse lukea lakaan. 23 24

Toistuvien vastausrivien (duplikaattien) karsta on hieman hankalampaa. Tietueet voidaan järjestää käyttäen järjestysavaimena koko tietuetta (jos tulokselle on määritelty järjestys käytetään järjestysperustaa avaimen alussa). Nä duplikaatit saadaan peräkkä ja ne voidaan helposti karsia yhdellä läpikäynnillä (tai lomituksen viimeisellä kierroksella) jos vastaus on pieni, riittää keskusmuistijärjestämen, mutta ensimmäen tulosrivi voidaan toimittaa eteenpä vasta kun viimeen syöttörivi on saatu. isot vastaukset edellyttävät ulkoista järjestämistä. 25 Toistuvien rivien karsta Tietueet voidaan myös hajauttaa koko tietueesta lasketun hajautusavaimen perusteella. Tällö duplikaatit sijoittuvat samaan soluun ja ne voidaan lisäysvaiheessa karsia. Jos osoiteavaruus on riittävän iso, tulee samaan soluun vähän tietueita ja vähän tutkittavaa. Tyypillisesti käytetään kahta peräkkäistä hajautusta jako h1... kuk vuorollaan h2 tuplat pois lisäysvaiheessa kokoamen 26 Toistuvien rivien karsta Jos projektio sisältää taulun avaimen ei tulosrivejä tarvitse lajitella tai hajauttaa, tiedetään että toistuvia rivejä ei ole. Liitos on tärkeimpiä ja yleisimpiä relaatioalgebran operaatioita Yleis liitos on taulun pääavaimen ja siihen viittaavan viiteavaimen yhtäsuuruuteen perustuva liitos. Seuraavassa käytetään esimerkkä taulujen opiskelija (500 sivua, kussak 20 tietuetta) ja suoritus (2000 sivua, kussak 50 tietuetta) liitosta opiskelijanumeron perusteella. 27 28 Liitos voidaan määritellä ristitulon ja valnan yhdistelmäksi. Ykskertaista olisi muodostaa ristitulo ja tehdä sen jälkeen valta. Ratkaisu on kuitenk tehoton. Liitoksen toteutukseen on tarjolla useita tekniikoita. Päätyypit: sisäkkäiset silmukat (nested loop jo) hakemistoliitos (dex nested loop jo) lomitusliitos (sort merge jo) hajautusliitos( hash jo) 29 Tarkastellaan taulujen R ja S liitosta ehdolla R.x=S.y Sisäkkäisten silmukoiden tekniikassa perusidea on seuraava: foreach tuple r R do foreach tuple s S do if r.x==sy then add {r,s} to result eli käydään läpi ulompi taulu ja jokaisen riv kohdalla käydään läpi sisempi taulu 30

Olkoon R:n sivumäärä pages(r) ja S:n sivumäärä pages(s) ja vastaavasti sivukoot tietuea psize(r) ja psize(s). Tällö edellä kuvatun ykskertaisen algoritm kustannus levyhakua olisi op = pages(r)+psize(r)*pages(r)*pages(s)+ tuloksen kirjoitus Esim: jos R= opiskelija ja S= suoritus, ni operaatioita = 500+500*20*2000 =20 000 500 + tulos. jos R= suoritus ja S= opiskelija, ni operaatioita= 2000+2000*50*500 = 50 002 000 + tulos Hidasta 31 Parannetaan algoritmia hieman ja käsitellään koko sivu kerralla Siis jokaista R:n sivua kohti käydään S kertaalleen läpi ja verrataan kaikkia R:n sivulla olevia tietueita vuorossa olevan S:n sivun tietueisi. operaatioita pages(r)+pages(r)*pages(s)+tuloksen kirjoitus R= opiskelija, S= suoritus: 500+500*2000=1 000 500 R= suoritus, S= opiskelija: 2000+2000*500 = 1 002 000 satunnaishakuajalla 10ms laskettuna tämä veisi 10 005 s Mitä enemmän R:stä käsitellään kerralla sitä vähemmän kierroksia tarvitaan, nipä parannetaan vielä 32 Jaksottaiset sisäkkäiset silmukat (Block nested loops) versio joka yleensä tarjolla tkhj:ssä Oletetaan, että liitoksen suorittamiseen on käytettävissä B syöttöpuskuria. Varataan näistä B-1 ulommalle taululle R ja 1 sisemmälle taululle S. Käydään yhdellä vertailukierroksella läpi kaikki ulomman taulun puskurit ja verrataan tietueita sisemmän taulun vuorossa olevan sivun tietueisi. Sisempi taulu S joudutaan käymään läpi roof(pages(r)/(b-1)) kertaa Vaikka levyoperaatioiden määrä on tässä mallissa pien, paras käsittelyteho saavutetaan, jos puskurikapasiteetti jaetaan tasan kummank liitostiedoston kesken levyhakuja tulee enemmän, mutta voidaan hyödyntää peräkkäisyyttä 33 Esimerkki: Varataan liitoksen toteutukseen puskuritilaa 101 syöttöpuskurille (404KB) R= opiskelija, S= suoritus operaatioita= 500 + (500/100) *2000 + tulos =10500+tulos satunnaishakuajalla 10 ms laskettuna tämä olisi 105 s R voidaan kuitenk lukea 100 sivun pätkä, jollo aikaa oikeastaan kuluisi 5*(satunnaishakuaika + 100 sivun siirto)+5*2000*(satunnaishakuaika+1 sivun siirto)= 5*(10ms +100*0.2 ms)+10000*(10 ms+0.2 ms)= 150 ms+102000ms= no 102 s R=suoritus, S=opiskelija operaatioita=2000 + (2000/100)*500= 12000 34 Jos jaettaisi puskuritila puoliksi R:lle ja S:lle ja R = opiskelija ja S= suoritus ni hakuaika: 10*(10ms+ 50 *0.2 ms)+ 10*2000/50*(10 ms+50 *0.2 ms)= 10*11ms+10*40*(11ms)= 110 ms + 4400ms =4.51 s odotusajat lisäävät kokonaisaikaa Hakemistoliitos (dex nested loop) Jos toisella taululla on hakemisto liitossarakkeeseen perustuen tehdään tästä sisempi taulu foreach tuple r R do foreach tuple s dex_search(s,r.x) do add {r,s} to result Jos hakemistona on rakenteeltaan B+ -puu rakenteen oheishakemisto, tarvitaan deks kautta hakuun tyypillisesti 1-4 levyhakua isollak tiedostolla. 35 36

Hakujen kokonaismäärä: pages(r)+pages(r)*psize(r)*(height(s)+matches(s)) height(s): levyhakujen määrä hakemiston kautta haettaessa, mukaan mahdolliset ylivuotoketjut ja oletukset siitä, mitä säilyy keskusmuistissa matches(s): montako keskimäär löytyy yhtä ulompaa kohti. Jos kyseessä on B+ -puuna toteutettu oheishakemisto, on jokaista tietuetta kohti oma hakemistotietue (jos tietueosoite on mukana avaimessa nämä ovat osoitejärjestyksessä), yksi haku / osuma riittänee 37 Esimerkki: R= opiskelija S=suoritus levyhakuja 500+500*20*(2+ 10) = 120 500 oletetaan tehollen hakukorkeus 2, opiskelijalla 10 suoritusta kaikki S:n haut satunnaishakuja -> no 1200 s R=suoritus, S=opiskelija levyhakuja 2000+2000*50*(2+1)= 302 000 Huomaamme, että kokonaan läpikäytäväksi (ulommaksi) kannattaa valita pienempi tauluista 38 Lomitusliitos (sort merge jo) soveltuu yhtäsuuruusliitokseen Lomitusliitoksessa taulut järjestetään liitossarakkeen perusteella Kun rivit ovat järjestyksessä on liitos muodostettavissa yhdellä läpikäynnillä Rivit ovat järjestyksessä esim., jos tiedoston toteutusrakenteena on ISAM tai B+ -puu Jos tiedostolla on B+ -puurakenteen oheishakemisto, tietueet saadaan myös järjestyksessä (tos hitaamm) Elleivät rivit ole järjestyksessä, ne pitää ens järjestää. Järjestämisen levyoperaatioiden määrähän oli 2N+2N*roof(log B-1 roof(n/(b-1))) tuloksen muodostus hoituu yhdellä läpikäynnillä. 39 40 Esim. Olkoon B=101, Kumpik esimerkkitaulu vaatii jonojen muodostuksen ja yhden lomituskierroksen sekä yhdistämisen liitoksen aikaansaamiseksi, Oletetaan että lomituksen tulos putkitetaan liitokseen, tällö operaatioita on 3* sivulukumäärä kummallak sort opiskelija luku+kirjoitus+luku putkeen sort suoritus merge jo tuloksen kirjoitus 41 eli esimerkkitapauksessa levyoperaatioita 3*500+3*2000+tulos = 7500 + tulos jonojen muodostus sujuu peräkkäiskäsittelynä lomituksessa voidaan jua odottamaan, Oletetaan, että jonoja luetaan lomituksessa10 ja 5 sivun jaksoissa (käytetään kaikki puskurit) opiskelija jonojen teko: 2*5*(10ms+100*0.2ms)+ suoritus jonojen teko: 2*20*(10ms+100*0.2ms) + opiskelija jonojen luku: 500/10*(10ms+10*0.2 ms) + suoritus jonojen luku: 2000/5*(10ms+5*02.ms)= 300ms+1200ms + 1500 ms + 8000 ms = 11s 42