Na základě neúplné specifikace bych udělal toto:
CREATE UNIQUE INDEX stock_UX1 ON stock (storeid,seedid,stk)
Tento index by splnil požadavek na index s storeid
jako vedoucí kolona. (A víme, že tento požadavek budeme mít, pokud se jedná o InnoDB a storeid
je cizí klíč.)
S tak krátkým řádkem tabulky bych pokračoval a udělal z něj krycí index a zahrnul všechny sloupce. Dotazy pak mohou být uspokojeny přímo z indexových stránek bez vyhledávání datových stránek v podkladové tabulce.
Protože víme, že (seedid,storeid)
je jedinečný (dán jako PRIMÁRNÍ KLÍČ), známe (storeid,seedid)
je také jedinečný, takže bychom mohli index prohlásit za UNIKÁTNÍ.
Existují další možnosti; výše uvedený index nemusíme vytvářet. Místo toho bychom mohli udělat toto:
CREATE INDEX stock_IX2 ON stock (storeid)
To však zabere téměř stejné množství místa a nebude to pro tolik možných dotazů tak přínosné.
Sekundární index bude obsahovat primární klíč tabulky; takže druhý index bude obsahovat seedid
sloupec, daný PRIMÁRNÍM KLÍČEM tabulky. To znamená, že index je ekvivalentní tomuto:
CREATE INDEX stock_IX3 ON stock (storeid,seedid)
A víme, že kombinace těchto dvou sloupců je jedinečná, takže můžeme zahrnout klíčové slovo UNIQUE
CREATE UNIQUE INDEX stock_UX4 ON stock (storeid,seedid)
Pokud uděláme EXPLAIN na dotaz ve tvaru
EXPLAIN
SELECT t.storeid
, t.seedid
, t.stk
FROM stock t
WHERE t.storeid = 'foo'
pravděpodobně uvidíme operaci prohledávání rozsahu na sekundárním indexu; ale načtení hodnoty stk
sloupec bude vyžadovat vyhledání datových stránek v podkladové tabulce. Včetně stk
sloupec v sekundárním indexu učiní index pokrývajícím index pro dotaz. S indexem doporučeným jako první v odpovědi očekáváme EXPLAIN
výstup zobrazí "Using index".