Если у вас в проекте есть запросы, которые выполняются секундами, а не миллисекундами, пора что-то менять!
Разбор примера
Допустим, у нас есть такой запрос:
SELECT * FROM orders WHERE customer_id = 123 ORDER BY order_date DESC;
Кажется простым, но выполняется медленно. В чём может быть проблема?
Основные причины тормозов:
- Нет нужного индекса – если customer_id или order_date не индексированы, база будет делать полный скан таблицы.
- Слишком много данных – если таблица огромная, ORDER BY без индекса будет работать медленно.
- Использование SELECT * – загружает ненужные колонки и увеличивает нагрузку.
Как ускорить?
Добавляем индекс (если его нет):
CREATE INDEX idx_orders_customer ON orders(customer_id, order_date DESC); Выбираем только нужные колонки: SELECT order_id, order_date FROM orders WHERE customer_id = 123 ORDER BY order_date DESC; Лимитируем выборку (если нужен только последний заказ): SELECT order_id, order_date FROM orders WHERE customer_id = 123 ORDER BY order_date DESC LIMIT 1;
Добавление индекса + правильный выбор колонок + LIMIT = в разы быстрее!