Кратък отговор:
Индексите ускоряват SELECT
и забавете INSERT
'с.
Обикновено е по-добре да имате индекси, защото те ускоряват select
повече, отколкото забавят insert
.
При UPDATE
индексът може да ускори нещата нагоре ако се използва индексирано поле в WHERE
клауза и забавете нещата, ако update
едно от индексираните полета.
Как да разберете кога да използвате индекс
Добавете EXPLAIN
пред вашия SELECT
изявление.
Така:
EXPLAIN SELECT * FROM table1
WHERE unindexfield1 > unindexedfield2
ORDER BY unindexedfield3
Ще ви покаже колко работа ще трябва да свърши MySQL за всяко от неиндексираните полета.
Използване тази информация можете да решите дали си струва да добавяте индекси или не.
Explain също може да ви каже дали е по-добре да премахнете и индексирате
EXPLAIN SELECT * FROM table1
WHERE indexedfield1 > indexedfield2
ORDER BY indexedfield3
Ако са избрани много малко редове или MySQL реши да игнорира индексът (това прави това от време на време) тогава можете също да пуснете индекса, защото тойе забавяне на вашия insert
s, но не ускорява вашия select
's.
Тогава отново може да се окаже, че изявлението ви select не е достатъчно умно.
(Извинете за сложността на отговора, опитвах се да го опростя, но не успях).
Връзка:
MySQL индекси – какво представляват най-добрите практики?