Индексите могат да играят важна роля в оптимизирането на заявките и бързото търсене на резултатите от таблици. Така че най-важната стъпка е да изберете кои колони да бъдат индексирани. Има две основни места, където можем да разгледаме индексирането:колони, посочени в клаузата WHERE и колони, използвани в клаузите JOIN. Накратко, такива колони трябва да бъдат индексирани, спрямо които трябва да търсите конкретни записи. Да предположим, че имаме таблица с име купувачи, където заявката SELECT използва индекси като по-долу:
SELECT
buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal' /* consider to use index */
Тъй като "buyer_id" се посочва в частта SELECT, MySQL няма да го използва за ограничаване на избраните редове. Следователно няма голяма нужда да го индексирате. По-долу е друг пример, малко по-различен от горния:
SELECT
buyers.buyer_id, /* no need to index */
country.name /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
first_name='Tariq' /* consider to use index */
AND
last_name='Iqbal' /* consider to use index */
Съгласно горните заявки first_name колоните last_name могат да бъдат индексирани, тъй като се намират в клаузата WHERE. Също така допълнително поле, country_id от таблицата за държави, може да се разглежда за индексиране, тъй като е в клауза JOIN. Така че индексирането може да се разглежда за всяко поле в клаузата WHERE или клауза JOIN.
Следният списък също предлага няколко съвета, които винаги трябва да имате предвид, когато възнамерявате да създадете индекси във вашите таблици:
- Индексирайте само онези колони, които се изискват в клаузите WHERE и ORDER BY. Индексирането на колони в изобилие ще доведе до някои недостатъци.
- Опитайте се да се възползвате от функцията „индексен префикс“ или „индекс на няколко колони“ на MySQL. Ако създадете индекс като INDEX(first_name, last_name), не създавайте INDEX(first_name). Въпреки това, "индекс префикс" или "индекс с няколко колони" не се препоръчва във всички случаи на търсене.
- Използвайте атрибута NOT NULL за тези колони, в които смятате за индексиране, така че стойностите NULL никога да не се съхраняват.
- Използвайте опцията --log-long-format, за да регистрирате заявки, които не използват индекси. По този начин можете да прегледате този регистрационен файл и съответно да коригирате заявките си.
- Изразът EXPLAIN ви помага да разкриете как MySQL ще изпълни заявка. Показва как и в какъв ред се съединяват таблиците. Това може да бъде много полезно за определяне как да се пишат оптимизирани заявки и дали е необходимо колоните да бъдат индексирани.
Актуализация (23 февруари'15):
Всеки индекс (добър/лош) увеличава времето за вмъкване и актуализиране.
В зависимост от вашите индекси (брой индекси и тип), се търси резултат. Ако времето ви за търсене ще се увеличи поради индекс, това е лош индекс.
Вероятно във всяка книга "Страница с индекс" може да има начална страница на глава, започване на номера на страницата на темата, също така започване на подтема. Някои разяснения в индексната страница помагат, но по-подробният индекс може да ви обърка или изплаши. Индексите също имат памет.
Изборът на индекс трябва да бъде мъдър. Имайте предвид, че не всички колони изискват индекс.