Sobes.tech
Middle

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