| 27 | |
| 28 | = PostgreSQL Индекси |
| 29 | |
| 30 | Индекси во PostgreSQL се структури на податоци што се користат за забрзување на пребарувањето во табелите. Индексите и овозможуваат на базата брзо да ги лоцира потребните редици наместо да прави sequential scan. Со користење на индекси драстично се намалува времето за select, update и delete, но поради дополнителните записи потребни за индексот се зголемува времето за insert. Индексите зафаќаат додатен простор на дискот, што некогаш може да биде и поголем од самата табела. Затоа треба внимателно да се одбере кога и каков индекс може да се користи за дадена табела. |
| 31 | |
| 32 | == B-tree Индекси |
| 33 | |
| 34 | B-tree (Balanced Tree) индексите се засновани на структура на балансирано дрво каде што секој јазол содржи повеќе клучеви сортирани по редослед. Оваа структура автоматски се балансира, што значи дека патот од коренот до секој лист има иста должина. Кога се пребарува вредност, алгоритмот започнува од коренот и се движи надолу по дрвото, споредувајќи ги вредностите и избирајќи го следниот јазол. Ова дава логаритамска сложеност O(log n) за пребарување, вметнување и бришење. B-tree индексите автоматски се креираат за primary key и unique ограничувањата и се идеални за споредби со еднаквост и опсег (>, <, BETWEEN), како и за операции на сортирање. |
| 35 | |
| 36 | == GIN Индекси |
| 37 | |
| 38 | GIN (Generalized Inverted Index) функционира слично како инвертиран речник во книга - наместо да пребарува низ секој документ, тој создава мапа од секоја вредност кон сите записи што ја содржат. За JSONB колона што содржи `{"tags": ["red", "blue"]}`, GIN ќе создаде записи каде што "red" и "blue" покажуваат кон тој ред. Кога се пребарува за документи што содржат "red", индексот директно знае кои редови да ги врати. Оваа структура е исклучително ефикасна за операции contains (@>, <@) и full-text search, но поради начинот на којшто ги чува податоците зафаќа голем простор во мерморија. GIN е идеален JSONB колони и full-text search пребарување каде што драстично ги подобрува перформансите. |
| 39 | |
| 40 | == GiST Индекси |
| 41 | |
| 42 | GiST (Generalized Search Tree) е структура со која може да се градат различни типови на индекси врз основа на концептот на "kлучеви-предикати". Наместо да чува точни вредности како B-tree, GiST чува информации за тоа какви податоци се содржани во секој поддел од дрвото. GiST е погоден за просторни пребарувања, nearest-neighbor пребарувања, операции со опсези на датуми и full-text search пребарување. Иако генерално е побавен од специјализираните индекси, GiST е многу помал од GIN и поефикасен за updates. |
| 43 | |
| 44 | == Заклучок |
| 45 | |
| 46 | Избирањето на соодветен тип индекс зависи од природата на податоците и типот на пребарувања што се извршуваат. B-tree е добар за стандардни релациони операции (order by, where), GIN за брзо пребарување во сложени структури (JSONB), и GiST за флексибилни и просторни операции. Секој има свои компромиси помеѓу перформанси, големина и сложеност на одржување. |