Ответ
Основные причины медленных SQL-запросов:
- Отсутствие индексов — приводит к полному сканированию таблицы (FULL TABLE SCAN).
- Неоптимальные JOIN — соединение больших таблиц без подходящих ключей.
- Выбор избыточных данных — использование
SELECT *вместо конкретных полей. - Блокировки (Lock Contention) — конкуренция за ресурсы при параллельных операциях.
- Неэффективные условия WHERE — функции над колонками, неселективные фильтры.
Пример проблемного запроса:
SELECT * FROM orders WHERE customer_id = 123 AND status = 'PENDING';
Без индекса по (customer_id, status) выполняется последовательное сканирование всей таблицы orders.
Способы оптимизации:
- Добавить составной индекс:
CREATE INDEX idx_orders_customer_status ON orders(customer_id, status); - Ограничить выборку полей:
SELECT id, amount FROM orders WHERE customer_id = 123 AND status = 'PENDING'; - Использовать
EXPLAIN(илиEXPLAIN ANALYZE) для анализа плана выполнения и выявления "узких мест". - Переписать запрос, разбивая сложные операции, или использовать временные таблицы.