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 1
Ačkoli existují pouze
3
zde 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ího2010
by 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 1
Bez indexu
filesort
by 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 tshirts
MySQL
použijeINDEX FOR GROUP-BY
a 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.