Select the language by clicking the flag

language=en language=sp language=ge language=fr language=it language=se language=fi
logo
     
   
 

 

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ä