Представь, что тебе надо найти слово в огромной книге на 1000 страниц.
Можно открыть первую страницу и читать всё подряд:
— не тут
— не тут
— снова не тут
— господи, когда это закончится 🫠
И так до победного.
Примерно так база данных ищет информацию, если у неё нет индекса.
Она просто перебирает много строк и пытается найти нужную.
На маленьком проекте это незаметно.
Ну подумаешь, 500 записей.
База пробежалась и нашла.
А теперь представь, что записей стало 5 миллионов.
И каждый пользователь открывает страницу, где нужно что-то найти, отсортировать, отфильтровать и показать.
В этот момент база такая:
— ребята, я вообще-то не поисковая собака 😅
Вот тут и появляются индексы
Индекс — это как оглавление или алфавитный указатель в книге.
Ты не читаешь всю книгу подряд, чтобы найти главу про массивы.
Ты открываешь оглавление, видишь нужную страницу и сразу прыгаешь туда.
База делает примерно то же самое.
Если есть индекс по полю, например по email, базе не нужно перебирать всех пользователей подряд. Она быстрее понимает, где искать нужную запись.
Без индекса:
«Так, проверю всех по очереди» 🐢
С индексом:
«Ага, вот тут лежит нужное» 🚀
Но есть нюанс.
Индексы — это не магическая кнопка «сделать всё быстро».
Они тоже занимают место и немного замедляют запись данных, потому что базе нужно не только сохранить новую строку, но и обновить индекс.
То есть индекс — это полезная штука, когда ты часто ищешь, фильтруешь или сортируешь по какому-то полю.
Например:
🔹 ищешь пользователя по email
🔹 фильтруешь заказы по статусу
🔹 сортируешь статьи по дате
🔹 выбираешь товары по категории
🔹 ищешь записи по user_id
А вот лепить индексы на всё подряд — плохая идея.
Это как сделать оглавление к каждому слову в книге. Вроде умно, но книга внезапно стала весить как холодильник 💀
Короче: индекс помогает базе не бегать по всей таблице, а сразу идти туда, где с большой вероятностью лежат нужные данные.
Поэтому один правильно поставленный индекс иногда ускоряет запрос не на 5%, а в десятки и сотни раз.
И да, когда сайт «просто стал медленным», очень часто где-то рядом грустит запрос без индекса 😄
А ты уже сталкивался с ситуацией, когда один индекс спасал проект от тормозов? Или пока база всё прощает? 👇