Оптимизация SQL-запросов через EXPLAIN-анализ 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Оптимизация SQL-запросов через EXPLAIN-анализ 1С-Битрикс
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1167
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Оптимизация SQL-запросов через EXPLAIN-анализ 1С-Битрикс

EXPLAIN — команда MySQL, которая показывает план выполнения запроса: какие таблицы сканируются, используются ли индексы, сколько строк обрабатывается. Это основной инструмент после обнаружения медленного запроса в slow query log.

Как читать EXPLAIN

EXPLAIN SELECT * FROM b_iblock_element
WHERE IBLOCK_ID = 5 AND ACTIVE = 'Y'
ORDER BY SORT;

Ключевые столбцы вывода:

Столбец На что смотреть
type ALL = full scan (плохо), ref/range/const = использует индекс
key Какой индекс выбрал оптимизатор, NULL = индекса нет
rows Оценка числа строк для просмотра. 100 000+ при простой выборке — проблема
Extra Using filesort = сортировка в памяти/на диске. Using temporary = временная таблица

EXPLAIN ANALYZE (MySQL 8.0+, MariaDB 10.9+) выполняет запрос и показывает реальное время:

EXPLAIN ANALYZE SELECT ...;

Характерные проблемы Битрикс

Using filesort на b_iblock_element. Запрос сортирует по SORT, но индекс не покрывает комбинацию (IBLOCK_ID, ACTIVE, SORT). Решение: составной индекс:

ALTER TABLE b_iblock_element
ADD INDEX ix_iblock_active_sort (IBLOCK_ID, ACTIVE, SORT);

rows = 500 000 на запрос к b_iblock_element_property. Фильтрация по значению свойства без индекса по (IBLOCK_PROPERTY_ID, VALUE). Для VARCHAR-поля VALUE — индекс по префиксу VALUE(64).

Using temporary при GROUP BY. Встречается в запросах фасетного фильтра. Фасет Битрикса строит оптимизированные таблицы b_iblock_find_* — если они не пересозданы после добавления свойств, запросы идут в обход.

Порядок работы

  1. Получить медленный запрос из slow query log или SQL-трекера Битрикс
  2. Запустить EXPLAIN — найти type=ALL или rows > 10 000 при точечной выборке
  3. Определить отсутствующий индекс или неэффективный JOIN
  4. Добавить индекс, повторить EXPLAIN — убедиться, что type изменился
  5. Проверить реальное время на боевых данных

После добавления индекса MySQL не всегда его выберет — если статистика таблицы устарела, запустите ANALYZE TABLE b_iblock_element для пересчёта.