База даних успішних вебпроєктів з часом суттєво збільшується. Спочатку все працює надзвичайно швидко, але паралельно із збільшенням рядків у таблицях відчувається збільшення часу виконання запиту. Це спричиняє не лише незручності для користувачів, які змушені чекати завантаження, але й можуть виникнути проблеми з перевищенням процесорних хвилин хостингу, через що вас можуть заблокувати або обмежити у певних функціях.

У цій статті мова йде про індекси - об'єкти бази даних, що створені з метою підвищення ефективності виконання запитів. Для таблиць без індексів запит однієї таблиці з сотнями тисяч рядків може бути досить вузьким місцем і виконуватися дуже повільно.

Індекси є спеціальними файлами і містять посилання на всі записи таблиці даних. У більш загальному сенсі індекс бази даних схожий на зміст книги, що може прискорити запит до бази даних. Без існування індексу база даних проходитиме по всіх рядках і вибере той, який відповідає умовам, а з відповідним індексом база даних безпосередньо знайде параметр, відповідний умовам в індексі.

Якщо ми використаємо оператор SQL "SELECT * FROM article WHERE id = 2000000", ви хочете, щоб база даних дала вам результат після послідовного зчитування 2 мільйонів рядків даних або безпосередньо знайшла його в індексі?

Надмірне використання індексів може призвести до небажаних наслідків, тому що індекс також має свої недоліки: хоча індекс значно підвищує швидкість запитів, він також знижує швидкість оновлення таблиці, наприклад INSERT, UPDATE і DELETE. Тому що при оновленні таблиці MySQL не тільки зберігає дані, але зберігає індексний файл. Загалом, ця проблема не є серйозною, але якщо ви створите кілька комбінованих індексів для великої таблиці, індексний файл швидко зростатиме. Індексування - це лише один із факторів, що підвищують ефективність. Якщо MySQL містить великий обсяг даних, вам потрібно витратити час на дослідження, щоб встановити найкращий індекс або оптимізувати оператор запиту.

Для того, щоб створити індекс поля необхідно виконати наступну команду:
ALTER TABLE `table` ADD INDEX `field` (`field`)
Виконавши цю операцію, ви найпростішим способом зможете досягти значного зменшення часу виконання запиту.