|
Relaatiotietokantojen indeksien luonti
Puutteellinen indeksointi on erittäinen yleinen syy tietokantasovellusten vasteaikaongelmiin. Monet luottavat kehittyneiden tietokantamoottoreiden
indeksoijiin, mutta ne eivät ole ongelmattomia! Open source tuotteissa, kuten MySQL ja PostgreQL, ei ole optimoijia lainkaan, joissa kanssa
työkenneltäessä on oikeaoppinen indeksisuunnittelu entistä tärkeämpää. Tällä kurssin tavoitteena on oppia suunnittelemaan optimaalisten
indeksien luontia nykylaitteistoille.
Sisällys:
Indeksisuunnittelun peruskäsitteet
- Täsmäävä sarake (matching)
- Tarkasteltava sarake (screening)
- Selektiivisyys, läpäisykerroin (filter factor, FF)
- Satunnaissipaisu (random touch)
- Peräkkäissipaisu (sequential touch)
Laiteoletukset vasteajan laskemiseksi
Vasteajan komponentit
Yleiset tapahtumat
Koko taulukon läpiluku nykylaitteilla
Satunnaishaku nykylaitteilla
Levymuisti eilen tänään ja huomenna
B-puu indeksi
Bittikarttaindeksi
Erilaisten indeksien vaikutus vaste- ja CPU-aikoihin
Yksinkertaisia esimerkkejä
Vaste- vai CPU-aika tärkeämpi
QUBE-laskenta
Lajittelun vaikutus
Haun (fetch) vaikutus
Paksut indeksit
Hyödyt ja haitat
Paksun indeksin ensimmäinen lehtisivu
Paksu indeksi tulee liian kalliiksi?
Jos SELECT -lause voitaisiin vaihtaa?
Kohti parempia indeksejä
Tärkeät käsitteet
Ehto (predikaatti)
Korrelointi
Selektiivisyys, läpäisykerroin (filter factor, FF)
KeskiarvoFF vs. pahin mahdollinen FF
Korreloinnin vaikutus FF:ään
Täsmäävyys (matching)
Tarkasteltavuus (screening)
Optimoijan rajoitteet
Riittävän helppo ehto
Oracle 9i Skip Scan
Vaikeat ehdot
OR WHERE-lauseessa
Tahdistettu vs tahdistamaton I/O
Tahdistettu indeksin skannaus
DB2 List Prefetch
Oracle Data Block Prefetch
Rivien järjestys levyllä
Klusteroitu indeksi
Satunnaissipaisu (random touch) vs. peräkkäissipaisu (sequential touch)
Indeksin systemaattinen suunnittelu
Havaitse SELECT-lauseet, jotka ovat liian hitaita huonosta indeksistä johtuen
Suunnittele indeksit, jotka ovat tekevät kaikista SELECT-lauseista riittävän nopeita
Kolmen tähden indeksit
Selektiivisyyden sudenkuoppa
Eri indeksiluokat
MCSF
MCF
Ideaalinen
Parhaimman indeksin valinta
Reaktiivinen indeksin suunnittelu
Huonojen indeksien havainnointi tuotantokannasta
Päivittäiset ja viikottaiset piikkiraportit
Syyllinen vai uhri?
SQL:ään kuluneen ajan jako eri komponentteihin
Potentiaalisia syyllisiä
Epäselvä tilanne
Ei-potentiaalinen syyllinen
Uhri
Jos piikkiraportteja ei ole saatavilla
Miksi liitokset ovat usein ongelmallisia?
Eri liitosmenetelmät
Liitosten vaikutukset
Mikä taulu tulee ensiksi?
Miten liitosmenetelmä vaikuttaa?
Entä jos kaikki predikaatit saadaan samaan tauluun?
Merge Scan ja Hash Join -liitosmenetelmien vaikutukset?
Liitosmenetelmän valinta
Perustarkastus liitoksia tehtäessä
Miksi liitokset ovat usei hitaita?
Arvaamattomat ehdot
Käyttäjän antaman syötteen käsittely SQL:llä
Yleisin ratkaisu
Valinnaiset kursorit
Monta laihaa indeksiä (ANDing)
Monta laihaa indeksiä (ORing)
Arvaamaton kysely
Kahden indeksin UNION
Milloin käytetään bittikarttaindeksejä
Tähtiliitokset
Yksi järjestys taulujen liittämiseen
Parempi järjestys
Yksi paksu indeksi jokaista predikaattisaraketta kohti
Yksi paksu indeksi jokaista dimensio-taulua kohti
Mitä jos faktataulussa on miljardi riviä
Summataulut
Tehokas vaihtoehto tähtiliitokselle: kyselytaulu
Taulukoiden ja indeksien uudelleen organisointi ja käytettävissä oleva tila
Täydellinen järjestys
Rapautuminen alkaa
Lehtisivujen jakautumissuhde (LPSR)
Indeksin kasvu uudelleen oragisoinnin jälkeen
Indeksirivien luokittelu
LPSR:n maksimiraja
Optimoijat eivät ole täydellisiä
Miksi näin?
EXPLAIN-lause
Saantipolun avainasiat
Optimoijaa voi auttaa
Optimoijaa voi myös huijata
Optimoijan tekemä FF arvio
Milloin valitaan saantipolku
Muutama esimerkki Oracle:n optimoijalle annettavista vihjeistä
|