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
GEOMETRYlubGEOGRAPHY.-- 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 |