Index může pomoci i na polích s nízkou mohutností, pokud:
-
Když je jedna z možných hodnot ve srovnání s ostatními hodnotami velmi vzácná a vy ji hledáte.
Například je velmi málo barvoslepých žen, takže tento dotaz:
SELECT * FROM color_blind_people WHERE gender = 'F'by s největší pravděpodobností těžil z indexu na
gender. -
Když mají hodnoty tendenci být seskupeny v pořadí tabulky:
SELECT * FROM records_from_2008 WHERE year = 2010 LIMIT 1Ačkoli existují pouze
3zde jsou různé roky, záznamy s dřívějšími roky jsou s největší pravděpodobností přidány jako první, takže před vrácením prvního2010by muselo být naskenováno velmi mnoho záznamů záznam, pokud ne pro index. -
Když potřebujete
ORDER BY / LIMIT:SELECT * FROM people ORDER BY gender, id LIMIT 1Bez indexu
filesortby bylo vyžadováno. I když je to poněkud optimalizované, dodržujteLIMIT, stále by to vyžadovalo úplné prohledání tabulky. -
Když index pokrývá všechna pole použitá v dotazu:
CREATE INDEX (low_cardinality_record, value) SELECT SUM(value) FROM mytable WHERE low_cardinality_record = 3 -
Když potřebujete
DISTINCT:SELECT DISTINCT color FROM tshirtsMySQLpoužijeINDEX FOR GROUP-BYa pokud máte málo barev, bude tento dotaz okamžitý i s miliony záznamů.Toto je příklad scénáře, kdy je index na poli s nízkou mohutností více efektivnější než na poli s vysokou mohutností.
Všimněte si, že pokud DML výkon není příliš důležitý, pak je bezpečné index vytvořit.
Pokud se optimalizátor domnívá, že index je neefektivní, index prostě nebude použit.