Оптимизация запросов

Если у вас в проекте есть запросы, которые выполняются секундами, а не миллисекундами, пора что-то менять!

Разбор примера

Допустим, у нас есть такой запрос:

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 = в разы быстрее! 

От Grizly715