Jaké typy indexů existují v SQL?
sobes.tech AI
Odpověď od AI
-
B-strom (B-tree): Nejčastěji používaný typ. Vhodný pro většinu operací čtení, včetně
WHERE,LIKE,ORDER BY.CREATE INDEX idx_column ON table_name (column_name); -
Hash (Hash): Optimalizováno pro přesné shody (
=). Nepodporuje rozsahové dotazy nebo řazení.-- Příklad syntaxe, může se lišit podle DBMS CREATE INDEX idx_column ON table_name USING HASH (column_name); -
Full-Text (Plný text): Používá se pro hledání v textu ve velkých textových polích (
VARCHAR,TEXT).-- Příklad syntaxe v MySQL CREATE FULLTEXT INDEX idx_text ON table_name (text_column); -- Příklad syntaxe v PostgreSQL CREATE INDEX idx_text ON table_name USING GIN (to_tsvector('czech', text_column)); -
Prostorové (Spatial): Pro indexaci geografických dat (body, linie, polygon). Používá se s datovými typy jako
GEOMETRYneboGEOGRAPHY.-- Příklad syntaxe v MySQL CREATE SPATIAL INDEX idx_geo ON table_name (spatial_column); -- Příklad syntaxe v PostgreSQL CREATE INDEX idx_geo ON table_name USING GIST (spatial_column); -
GIN (Generalized Inverted Index) a GiST (Generalized Search Tree) v PostgreSQL: Flexibilní typy indexů vhodné pro různé úkoly, včetně full-textového vyhledávání, indexace polí a JSON.
-
Clustered (Klastry): Určuje fyzické pořadí řádků v tabulce. Tabulka může mít pouze jeden klastrační index. Často je založen na primárním klíči.
-- Při deklaraci primárního klíče se často vytváří klastrační index CREATE TABLE table_name ( id INT PRIMARY KEY CLUSTERED, -- SQL Server ... ); -
Non-Clustered (Ne klastry): Samostatná struktura dat, která ukládá páry "hodnota sloupce (nebo sloupců) + ukazatel na řádek dat". Tabulka může mít více ne klastračních indexů.
Porovnání:
| Typ indexu | Použití | Operace |
|---|---|---|
| B-strom | Obecný, většina typů dat | =, <, >, <=, >=, BETWEEN, LIKE (začátek) |
| Hash | Přesná shoda (=) |
= |
| Full-Text | Vyhledávání v textu | MATCH AGAINST (MySQL), to_tsquery (PostgreSQL) |
| Prostorové | Geografická data | Prostorové funkce |
| Klastr | Fyzické uspořádání řádků | Zrychluje výběr rozsahů |
| Ne klastr | Zrychlení hledání podle indexovaných sloupců | =, <, >, <= atd. |