Postgres – všetko, čo si chcel vedieť, ale bál sa spýtať svojho seniora, aby si nevypadal ako jelito 16. Indexy.
Prehľad a komentár k indexom v Postgrese.
Všeobecný prehľad o tom, čo je index je dobrý u Pavla Stěhuleho na rootu. Operuje síce len z B-TREE indexom, ale pre obecný prehľad to stačí. Ďalšie dobré zdroje z netu, z ktorých som namudroval:
Ross Leishman o indexoch, deep dive. Je to síce o Oraclu, ale naprosto perfektné na pochopenie princípov.
Indexy všeobecne:
Index je metódou, ako sa bude pristupovať k datám (k heapu). aktuálne existuje 6 typov indexov: B-tree, hash, GIN, GIST, SP-GIST, BRIN. Defaultne sa pri vytváraní indexu bytvorí B-tree, pokiaľ nie je explicitne uvedené inak.
Index obecne zvyšuje rýchlosť pri SELECToch, ale znižuje pri INSERToch a UPDATEoch. Tzn. nie vždy má zmysel. Nemá zmysel pri malých tabuľkách (tak do 10 000 recordov) a pokiaľ tabuľky obsahujú veľa NULL záznamov.
B-tree
- základný typ indexu, prakticky u všetkých druhov DB. Proste register v knihe.
- nie je to binary search a “B” neznamená balanced, aj keď B-tree je vždy balanced. :)
- root – branches – leaves; Len leaves obsahujú odkazy na heap/records.
- v skutočnosti sú pomerne plytké, tak 4-5 úrovní.
- keď je index plný a je nutné pridať ďalší level, tak sa pridá “nad rootom” – jasné, ak by sa pridával na leves, tak by prestal byť balancovaný
GIST
Používsa sa v PostGISe. Pritorové fičúry sa nedajú indexovať priamo a preto je to indexácia obálok (bounding boxov). Originálna štúdia R-tree indexovania od Antonina Gutmana v r. 198č je tu (a full text tu).