Какви видове индекси съществуват в PostgreSQL?
sobes.tech AI
Отговор от AI
Съществуват следните основни видове индекси:
-
B-дерево (B-дерево) - най-разпространеният тип, подходящ за повечето типични заявки (равенство, сравнение, диапазон). Базирано на балансирано дърво.
-
Hash (Хеш) - използва се за проверка на равенство (=). По-бързо от B-дерево за такива заявки, но не поддържа сравнения и диапазони. Запазва хеш стойността на ключа и указател към реда.
-
GiST (Обобщено дърво за търсене) - обобщена структура на дърво за търсене, която позволява създаването на различни индекси за сложни типове данни (геометрични, текстови с пълнотекстово търсене). Базирано на балансирано дърво.
-
SP-GiST (Разделено по пространство обобщено дърво за търсене) - специализирана версия на GiST за данни, които могат да бъдат разделени по пространство (например точки, правоъгълници). Примери: k-d дървета, quadtrees.
-
GIN (Обобщен обърнат индекс) - обобщен обърнат индекс, главно за търсене на елементи вътре в сложни стойности (например масиви, JSONB). Често се използва за пълнотекстово търсене.
-
BRIN (Индекс за блоков диапазон) - индекс за диапазон на блокове. Подходящ за много големи таблици с естествено сортирани данни (например по време). Индексира диапазона на стойностите във физическите блокове на диска.
-
Bloom (Филтър Блум) - не е традиционен индекс, а вероятностна структура от данни за бърза проверка за отсъствие на елемент. Използва се за ускоряване на селекцията от много големи таблици, когато не е необходима точна съвпадение или като допълнителен филтър преди сканиране на основния индекс.
Примери за използване:
- B-дерево: индекс върху числови полета, дати, низове за търсене по диапазон (
WHERE amount > 100). - Hash: рядко се използва директно, тъй като B-дервото обикновено е по-бързо за повечето задачи.
- GiST: геопространствени индекси (
gist(location)), индекси за пълнотекстово търсене (to_tsvector). - SP-GiST: индекси за двумерни данни (
spgist(point)). - GIN: индекси за масиви (
gin(tags)), JSONB (gin(data)), пълнотекстово търсене. - BRIN: индекс върху полето
timestampв лог таблици, където данните са подредени по време. - Bloom: индекс върху набор от колони (
bloom(col1, col2, col3)) за бързо изключване на редове, където комбинацията от стойности не присъства.
Изборът на тип индекс зависи от типа данни на колоната и вида на заявките, които трябва да бъдат оптимизирани.