Назад к вопросам
Middle
66
questionbank

Какие виды индексов существуют в 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)
Пространственные Географические данные Пространственные функции
Кластерные Физическое упорядочивание строк Ускоряет выборку диапазонов
Некластерные Ускоряет поиск по индексированным столбцам =, <, >, <= и т.д.