Sobes.tech
Middle

Jakie rodzaje indeksów istnieją w SQL?

sobes.tech AI

Odpowiedź od AI

  • Drzewo-B (B-drzewo): Najczęściej używany typ. Odpowiedni dla większości operacji odczytu, w tym WHERE, LIKE, ORDER BY.

    CREATE INDEX idx_column ON table_name (column_name);
    
  • Hash (Hash): Optymalizowany dla dokładnych dopasowań (=). Nie obsługuje zapytań zakresowych ani sortowania.

    -- Przykład składni, może się różnić w zależności od systemu zarządzania bazą danych
    CREATE INDEX idx_column ON table_name USING HASH (column_name);
    
  • Pełny tekst (Full-Text): Używany do wyszukiwania tekstu w dużych polach tekstowych (VARCHAR, TEXT).

    -- Przykład składni w MySQL
    CREATE FULLTEXT INDEX idx_text ON table_name (text_column);
    -- Przykład składni w PostgreSQL
    CREATE INDEX idx_text ON table_name USING GIN (to_tsvector('russian', text_column));
    
  • Przestrzenny (Spatial): Do indeksowania danych geograficznych (punkty, linie, wielokąty). Używany z typami danych takimi jak GEOMETRY lub GEOGRAPHY.

    -- Przykład składni w MySQL
    CREATE SPATIAL INDEX idx_geo ON table_name (spatial_column);
    -- Przykład składni w PostgreSQL
    CREATE INDEX idx_geo ON table_name USING GIST (spatial_column);
    
  • GIN (Uogólniony indeks odwrócony) i GiST (Uogólnione drzewo wyszukiwania) w PostgreSQL: Elastyczne typy indeksów, odpowiednie do różnych zadań, w tym wyszukiwania pełnotekstowego, indeksowania tablic i JSON.

  • Klastry (Clustered): Określa fizyczny porządek wierszy w tabeli. Tabela może mieć tylko jeden indeks klastrowy. Często oparty na kluczu głównym.

    -- Przy deklaracji klucza głównego często tworzony jest indeks klastrowy
    CREATE TABLE table_name (
        id INT PRIMARY KEY CLUSTERED, -- W SQL Server
        ...
    );
    
  • Nieklastrowe (Non-Clustered): Oddzielna struktura danych przechowująca pary "wartość kolumny (lub kolumn) + wskaźnik na wiersz danych". Tabela może mieć wiele indeksów nieklastrowych.

Porównanie:

Typ indeksu Zastosowanie Operacje
B-drzewo Ogólne, większość typów danych =, <, >, <=, >=, BETWEEN, LIKE (początek)
Hash Dokładne dopasowanie (=) =
Pełny tekst Wyszukiwanie tekstu MATCH AGAINST (MySQL), to_tsquery (PostgreSQL)
Przestrzenny Dane geograficzne Funkcje przestrzenne
Klastry Fizyczny porządek wierszy Przyspiesza wybór zakresów
Nieklastrowe Przyspiesza wyszukiwanie po indeksowanych kolumnach =, <, >, <= i inne