Какви видове индекси съществуват в SQL?
sobes.tech AI
Отговор от AI
-
B-дерево (B-Tree): Най-често срещаният тип. Подходящ за повечето операции за четене, включително
WHERE,LIKE,ORDER BY.CREATE INDEX idx_column ON table_name (column_name); -
Hash (Hash): Оптимизиран за точни съвпадения (
=). Не поддържа диапазонни заявки или сортиране.-- Пример за синтаксис, може да варира в зависимост от СУБД CREATE INDEX idx_column ON table_name USING HASH (column_name); -
Пълнотекстови (Full-Text): Използват се за търсене по текст в големи текстови полета (
VARCHAR,TEXT).-- Пример за синтаксис в MySQL CREATE FULLTEXT INDEX idx_text ON table_name (text_column); -- Пример за синтаксис в PostgreSQL CREATE INDEX idx_text ON table_name USING GIN (to_tsvector('bulgarian', text_column)); -
Териториални (Spatial): За индексиране на географски данни (точки, линии, многоъгълници). Използват се с типове данни като
GEOMETRYилиGEOGRAPHY.-- Пример за синтаксис в MySQL CREATE SPATIAL INDEX idx_geo ON table_name (spatial_column); -- Пример за синтаксис в PostgreSQL CREATE INDEX idx_geo ON table_name USING GIST (spatial_column); -
GIN (Generalized Inverted Index) и GiST (Generalized Search Tree) в PostgreSQL: Гъвкави типове индекси, подходящи за различни задачи, включително пълнотекстово търсене, индексиране на масиви и JSON.
-
Кластерни (Clustered): Определя физическия ред на редовете в таблицата. Една таблица може да има само един кластерен индекс. Често е базиран на първичния ключ.
-- При обявяване на първичен ключ, често се създава кластерен индекс CREATE TABLE table_name ( id INT PRIMARY KEY CLUSTERED, -- В SQL Server ... ); -
Некластерни (Non-Clustered): Отделна структура, която съхранява двойки "стойност на колона (или колони) + указател към реда данни". Таблицата може да има множество некластерни индекси.
Сравнение:
| Тип индекс | Приложение | Операции |
|---|---|---|
| B-дерево | Общ, за повечето типове данни | =, <, >, <=, >=, BETWEEN, LIKE (начало) |
| Hash | Точно съвпадение (=) |
= |
| Пълнотекстови | Търсене по текст | MATCH AGAINST (MySQL), to_tsquery (PostgreSQL) |
| Териториални | Географски данни | Териториални функции |
| Кластерни | Физическо подреждане на редовете | Ускорява избори по диапазони |
| Некластерни | Ускорява търсенето по индексовани колони | =, <, >, <= и т.н. |