2013 m. vasario 3 d., sekmadienis

MS SQL indexing

Norint pagerinti užklausų veikimą, vienas iš svarbiausių aspektų - planuoti indeksų kūrimą. Norint indeksus naudoti - reikia suprasti tiek indeksų struktūrą, tiek kaip naudojami duomenys.

Pagrindiniai SQL serverio indeksai: heaps, clustered indexes ir non-clustered indexes. SQL Server 2008 atsirado full-text indexing.

SQL Sever duomenis nuskaito vienu iš šių būdų:
- nuskaitydamas visą lentelę (table scan);
- naudodamas indeksus (index).

Heap - lentelė be clustered index. SQL Sever naudoja Index Allocation Map (IAM) puslapius laikyti heap'ams. Heap'ai turi vieną eilutę sys.partitions sistemoje, kur index_id = 0. Pagal nutylėjimą heap turi single partition.


Heap in single partition (paimta iš 


Clustered index - gali būti vienas lentelėje. Įgyvendintas kaip B-tree (balanced). Pagal šį indeksą būna surikiuoti duomenys. Kad geriau suprastume, tai knygoje atitinka turinį.

Clustered indeksai turi vieną eilutę sys.partitions sistemoje, kur index_id = 1.

Clustered indekas in single partition (paimta iš 

Non-clustered index - irgi palaiko B-tree struktūrą. Gal lengviau būtų suprasti, knygoje non-clustered indeksus atitinka "rodyklė", t.y. kur pagal terminą nurodyta, kokiame puslapyje jis paminėtas.

Non clustered index in single partition (paimta iš http://msdn.microsoft.com/en-us/library/ms177484(v=sql.105).aspx)

Lentelė gali turėti 249 non-clustered indeksus. Non-clustered indeksai neįtakoja duomenų rikiavimo (duomenys būna surikiuoti pagal clustered index).

Composite index - naudojamas, kai dažnai ieškoma informacijos keliais būdais. Tokį indeksą gali sudaryti iki 16 stulpelių. Composite indeksas su stulpeliais (col1, col2) ne tas pats, kaip (col2, col1).

Partitioned index - indeksas horizontaliai padalijamas pagal rėžius.

Unique index - užtikrina stulpelio reikšmės unikalumą.

Full-text indexing - palaiko išplėstinės paieškos galimybes. Gali būti vienas indeksas lentelėje arba viewe. Jis gali turėti savyje 1024 stulpelius, kurių tipai: charvarcharncharnvarchartextntextimagexml, and varbinary(max).

Full-text indexing:
http://www.simple-talk.com/sql/learn-sql-server/understanding-full-text-indexing-in-sql-server/

Papildomi nustatymai

Kad indeksai sėkmingai veiktų ir gerintų užklausų veikimą, būtina pakankamai laisvos vietos. Jeigu bus mažai vietos, įsiterpus naujam įrašui, turinys gali pasiskirstyti dviejuose puslapiuose. Tam, kuriant indeksus, nurodomos dvi savybės:

FILLFACTOR - nurodo, kiek vietos procentais reikia lapų viršūnėms (tikslas - sumažinti page splitting):
- naudojamas mažas FILLFACTOR OLTP aplikacijose;
- naudojamas aukštas FILLFACTOR OLAP aplikacijose.

PAD_INDEX - apibrėžia, kiek vietos reikia neindeksuotų lapų viršūnėms.

PAD_INDEX naudojams tik kartu su FILLFACTOR.

Komentarų nėra:

Rašyti komentarą