Назовите основные причины медленной работы SQL-запросов к базе данных.

Ответ

Медленные SQL-запросы — одна из самых частых проблем в бэкенде. Вот основные причины:


  1. Отсутствие индексов.

    Самая частая причина. Без индекса по полю в WHERE или JOIN база данных вынуждена сканировать всю таблицу (Full Table Scan), что крайне неэффективно на больших объёмах данных.



  2. Неправильно составленные или неэффективные индексы.

    Индекс есть, но он не используется или используется плохо. Например, составной индекс (A, B) не будет эффективно работать для запроса с условием WHERE B = ....



  3. Проблема N+1 запроса.

    Часто возникает при использовании ORM. Вместо одного запроса с JOIN для получения связанных данных, выполняется один начальный запрос, а затем N дополнительных запросов для каждой полученной записи.



  4. *Выборка избыточных данных (`SELECT ).** ЗапросSELECT *` заставляет БД читать все столбцы таблицы, что увеличивает нагрузку на I/O и сеть, особенно если некоторые столбцы содержат большие объёмы данных (TEXT, BLOB).



  5. Сложные JOIN и подзапросы.

    Соединение нескольких больших таблиц или использование сложных вложенных запросов может быть очень ресурсоёмким для планировщика запросов.



  6. Блокировки (Locks).

    Длинные транзакции или медленные запросы на запись могут блокировать строки или целые таблицы, заставляя другие запросы ждать освобождения ресурсов.



  7. Устаревшая статистика.

    Планировщик запросов СУБД использует статистику о распределении данных в таблицах для построения оптимального плана выполнения. Если статистика устарела, план может быть неэффективным.



  8. Сетевые задержки и объём данных.

    Высокий пинг до сервера БД или передача большого объёма данных между приложением и базой может значительно замедлить общую операцию.