Индексът може да помогне дори при полета с ниска мощност, ако:
-
Когато една от възможните стойности е много рядка в сравнение с другите стойности и я търсите.
Например, има много малко далтонисти, така че тази заявка:
SELECT * FROM color_blind_people WHERE gender = 'F'
най-вероятно ще се възползва от индекс на
gender
. -
Когато стойностите са склонни да бъдат групирани в реда на таблицата:
SELECT * FROM records_from_2008 WHERE year = 2010 LIMIT 1
Въпреки че има само
3
отделни години тук най-вероятно първо се добавят записи с по-ранни години, така че много записи ще трябва да бъдат сканирани, преди да се върне първата2010
запис, ако не за индекса. -
Когато имате нужда от
ORDER BY / LIMIT
:SELECT * FROM people ORDER BY gender, id LIMIT 1
Без индекса,
filesort
би се изисквало. Въпреки че е донякъде оптимизиран, направете заLIMIT
, пак ще се нуждае от пълно сканиране на таблицата. -
Когато индексът покрива всички полета, използвани в заявката:
CREATE INDEX (low_cardinality_record, value) SELECT SUM(value) FROM mytable WHERE low_cardinality_record = 3
-
Когато имате нужда от
DISTINCT
:SELECT DISTINCT color FROM tshirts
MySQL
ще използваINDEX FOR GROUP-BY
, и ако имате малко цветове, тази заявка ще бъде незабавна дори с милиони записи.Това е пример за сценарий, когато индексът на поле с ниска мощност е повече по-ефективно от това в поле с висока мощност.
Имайте предвид, че ако DML
производителността не е особено важна, тогава е безопасно да създадете индекса.
Ако оптимизаторът смята, че индексът е неефективен, той просто няма да се използва.