Какие виды индексов существуют в SQL?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
-
B-дерево (B-tree): Наиболее распространенный тип. Подходит для большинства операций чтения, включая
WHERE,LIKE,ORDER BY.CREATE INDEX idx_column ON table_name (column_name); -
Хеш (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('russian', 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 (начало) |
| Хеш | Точное совпадение (=) |
= |
| Полнотекстовые | Поиск по тексту | MATCH AGAINST (MySQL), to_tsquery (PostgreSQL) |
| Пространственные | Географические данные | Пространственные функции |
| Кластерные | Физическое упорядочивание строк | Ускоряет выборку диапазонов |
| Некластерные | Ускоряет поиск по индексированным столбцам | =, <, >, <= и т.д. |