Оптимизация SQL-запросов на Битрикс: ищем и переписываем тяжёлые запросы
Находим тяжёлые SQL-запросы по slow query log и EXPLAIN, переписываем их, добавляем индексы, убираем N+1 и лишние выборки инфоблоков, настраиваем кеширование. Время ответа страниц падает, нагрузка на базу данных снижается.
Что входит в оптимизацию SQL-запросов
Работаем по слою базы данных: находим тяжёлые запросы, разбираем планы выполнения, добавляем индексы, убираем N+1 и настраиваем кеширование выборок.
Оптимизация SQL-запросов на Битрикс: что это и зачем
Оптимизация SQL-запросов на 1С-Битрикс — это поиск, разбор и переписывание тяжёлых обращений к базе данных, из-за которых страницы открываются медленно, а сервер базы перегружается в часы пик. На большинстве проектов узкое место находится не в PHP-коде и не в шаблоне, а именно в запросах: один невинный вызов в цикле превращается в тысячи обращений к базе, фильтр инфоблока идёт без индекса и сканирует всю таблицу, а выборка тянет лишние поля и строки, которые потом отбрасываются. Мы находим такие запросы по slow query log и профилировщику, разбираем каждый через EXPLAIN и переписываем так, чтобы база отвечала за миллисекунды, а не за секунды.
В отличие от общей оптимизации скорости, где работают сразу с кешем, версткой и сервером, эта услуга сфокусирована на одном слое — базе данных и запросах к ней. Именно он чаще всего остаётся непроработанным: кеш можно включить за час, а вот разобраться, почему конкретный getList отрабатывает за две секунды и грузит диск, — это адресная инженерная работа. Мы измеряем реальную нагрузку, выделяем десяток самых дорогих запросов, которые дают основной вклад в медленную работу, и бьём точечно по ним. Такой подход даёт максимальный эффект на вложенные часы: переписать три-четыре тяжёлых запроса часто важнее, чем перебрать сотню мелких.
Из чего складывается работа
Под капотом оптимизация запросов объединяет несколько связанных направлений, каждое из которых снимает свой класс проблем. Slow query log и профилировщик показывают, какие запросы выполняются дольше всего и как часто. EXPLAIN раскрывает план выполнения: где база читает по индексу, а где сканирует таблицу целиком. Индексы добавляют недостающие пути доступа, чтобы фильтр и сортировка работали по нужным колонкам. Устранение N+1 убирает запросы, размноженные в циклах. Фильтрация инфоблоков переводится на индексируемые поля и правильные методы выборки. А кеширование результатов снимает повторные обращения к базе там, где данные меняются редко.
Главные направления работы по оптимизации запросов:
- сбор и анализ slow query log, выделение самых дорогих и частых запросов;
- разбор плана выполнения через EXPLAIN: тип доступа, число строк, использование индексов;
- добавление и корректировка индексов под реальные фильтры и сортировки;
- устранение проблемы N+1 — запросов, размноженных в циклах выборки;
- оптимизация фильтрации инфоблоков и параметров getList: поля, select, runtime;
- кеширование тяжёлых выборок и управляемое кеширование компонентов;
- переписывание самих SQL-запросов: убираем лишние JOIN, подзапросы и SELECT по всем полям.
Кому нужна оптимизация SQL-запросов на Битрикс
Услуга окупается там, где база данных стала узким местом. Это интернет-магазины и каталоги с десятками тысяч товаров, где фильтр и листинг тормозят. Это порталы и B2B-кабинеты с большими объёмами заказов и взаиморасчётов, где личный кабинет открывается секундами. Это HighLoad-проекты, где база нагружена в часы пик и упирается в процессор или диск. Общий признак один: страницы стали медленнее по мере роста данных, а сервер базы регулярно показывает высокую нагрузку. Чем больше таблицы и чем активнее трафик, тем заметнее эффект от переписывания тяжёлых запросов.
Отдельная ценность — для проектов с активной фильтрацией каталога. Когда у вас умный фильтр по десяткам свойств и сотням тысяч товаров, каждый неоптимальный запрос фильтра умножается на число посетителей и превращается в постоянную нагрузку на базу. Перевод фильтрации на индексируемые поля, правильная работа со свойствами инфоблоков и кеширование результатов снимают эту нагрузку и ускоряют выдачу каталога в разы.
Как устроена работа и запуск
Оптимизацию мы ведём измеримо: сначала снимаем базовые показатели, потом меняем запросы и проверяем эффект на тех же метриках. На старте включаем сбор медленных запросов, профилируем типовые страницы и строим список самых дорогих обращений к базе. Дальше разбираем каждый через EXPLAIN, переписываем запрос или добавляем индекс, прогоняем под нагрузкой и фиксируем, насколько упало время ответа и число прочитанных строк. Такой цикл повторяется по приоритету: сначала самые тяжёлые и частые запросы, затем менее значимые. Все изменения вносим аккуратно, не ломая логику и обновляемость проекта.
Фундамент услуги — измерения и план выполнения, а не догадки. Мы не переписываем запросы наугад и не добавляем индексы на всё подряд: лишние индексы замедляют запись и раздувают базу. Каждое решение подтверждается данными: до и после изменения видно, как изменился план, время и нагрузка. При необходимости работа стыкуется с настройкой самой СУБД и кеша, но фокус этой услуги — именно запросы и индексы. По итогам вы получаете список переписанных запросов, добавленных индексов и измеримый прирост скорости, который сохраняется при дальнейшем росте данных.
Результат оптимизации SQL-запросов на Битрикс — это быстрые страницы и разгруженная база данных. Время ответа на тяжёлых разделах падает в разы, нагрузка на сервер базы снижается, проект перестаёт упираться в процессор и диск в часы пик и спокойно держит рост трафика и каталога. Менеджеры и клиенты работают без задержек, а вы экономите на железе, которое иначе пришлось бы наращивать под неоптимальные запросы.
Путь тяжёлого запроса от поиска до ускорения
Запрос попадает в slow query log, мы разбираем его план через EXPLAIN, добавляем индекс или переписываем выборку, проверяем под нагрузкой и фиксируем падение времени ответа.
Кто оптимизирует запросы и чем это отличается
Тяжёлые запросы можно глушить мощным железом, чинить силами штатного программиста или адресно переписывать с разбором планов. Разница — в устойчивости результата.
| Критерий | Нарастить железо | Штатный программист | Студия B2Bsite |
|---|---|---|---|
| Подход к причине | Маскирует проблему | По мере сил | Адресно по slow log |
| Замер эффекта | Нет | Частично | Да, до и после |
| Стоимость в долгую | Растёт постоянно | Зарплата | Разовая работа |
| Компетенции по БД | Не нужны | Зависит от опыта | EXPLAIN и индексы |
| Результат | Вернётся с ростом данных | Без замеров наугад | Устойчивый, измеримый |
Типичные причины медленных запросов на Битрикс
Большинство тормозов базы данных сводится к нескольким повторяющимся ошибкам в запросах. Ниже — что мы находим чаще всего и как это лечим.
Как мы оптимизируем SQL-запросы
Идём измеримо: сначала находим тяжёлые запросы, потом переписываем по приоритету и проверяем эффект на тех же метриках.
Сколько занимает оптимизация запросов
Сколько стоит оптимизация SQL-запросов
Стоимость зависит от объёма базы, числа тяжёлых запросов и сложности логики. Ниже — ориентиры; точную смету присылаем после короткого аудита slow query log, бесплатно.
Находим тяжёлые запросы и даём план оптимизации с приоритетами.
- Сбор slow query log
- Разбор планов EXPLAIN
- Список тяжёлых запросов
- План оптимизации с приоритетами
Переписываем тяжёлые запросы, добавляем индексы, убираем N+1.
- Всё из экспресс-аудита
- Переписывание тяжёлых запросов
- Индексы под фильтры и сортировки
- Устранение N+1 и чистка getList
- Замеры до и после
Глубокая оптимизация запросов и кеширования для нагруженных проектов.
- Всё из тарифа «Оптимизация запросов»
- Кеширование тяжёлых выборок
- Оптимизация фильтрации каталога
- Нагрузочное тестирование
- Рекомендации по настройке СУБД
Экспресс-аудит запросов от 25 000 ₽
Находим тяжёлые запросы и даём план оптимизации с приоритетами.
- Сбор slow query log
- Разбор планов EXPLAIN
- Список тяжёлых запросов
- План оптимизации с приоритетами
Популярный Оптимизация запросов от 60 000 ₽
Переписываем тяжёлые запросы, добавляем индексы, убираем N+1.
- Всё из экспресс-аудита
- Переписывание тяжёлых запросов
- Индексы под фильтры и сортировки
- Устранение N+1 и чистка getList
- Замеры до и после
База под нагрузку от 140 000 ₽
Глубокая оптимизация запросов и кеширования для нагруженных проектов.
- Всё из тарифа «Оптимизация запросов»
- Кеширование тяжёлых выборок
- Оптимизация фильтрации каталога
- Нагрузочное тестирование
- Рекомендации по настройке СУБД
Дополнительные опции
| Оптимизация умного фильтра каталога | от 35 000 ₽ |
| Настройка кеширования компонентов и выборок | от 30 000 ₽ |
| Регулярный мониторинг медленных запросов | от 15 000 ₽ в месяц |
Сколько вы теряете на медленных запросах
Прикиньте, сколько внимания и заказов утекает, пока тяжёлые страницы открываются секундами. Каждая лишняя секунда ответа базы снижает конверсию и отпугивает часть посетителей.
Оценка по формуле: посетители × доля медленных страниц × доход с посетителя × 0,1 (доля, которую теряете на отказах из-за задержек). Это ориентир, а не гарантия.
Рассчитайте стоимость оптимизации запросов
Ответьте на несколько вопросов о вашем проекте — прикинем объём работ и сориентируем по стоимости и срокам оптимизации запросов.
Кейсы оптимизации SQL-запросов
Что говорят о результате
На что можно рассчитывать по договору
Частые вопросы об оптимизации запросов — и наш ответ
Это не общие советы, а закономерности из реальных нагруженных проектов на Битрикс. Каждый ответ — позиция нашей команды.
Переписать запросы или нарастить железо
Когда база данных начинает тормозить, у бизнеса обычно два соблазна: докупить мощный сервер или попросить штатного программиста что-нибудь подкрутить. Оба пути выглядят быстрее и проще, чем адресная оптимизация запросов. Но железо лишь маскирует проблему, а правки наугад без замеров часто делают только хуже. Неоптимальный запрос остаётся неоптимальным — он просто читает миллионы строк на более быстром диске, и с ростом данных всё возвращается. Ниже разбираем, почему тяжёлые запросы тормозят базу, что именно мы с ними делаем и как строим работу так, чтобы прирост скорости был устойчивым, а не разовым.
Почему именно запросы становятся узким местом
1С-Битрикс — это богатая платформа со множеством абстракций: инфоблоки, компоненты, ORM, выборки getList. Они удобны для разработки, но легко порождают неоптимальные обращения к базе, если их применять без оглядки на план выполнения. Самый частый сценарий — запрос внутри цикла: код перебирает список товаров или заказов и на каждой итерации лезет в базу за деталями. На десяти элементах это незаметно, на тысяче — страница встаёт. Второй частый случай — фильтр по неиндексированному свойству инфоблока: база вынуждена прочитать всю таблицу свойств целиком, чтобы отобрать нужные строки. Третий — выборка по всем полям и без лимитов, когда из базы тянутся данные, которые тут же отбрасываются.
Все эти проблемы объединяет одно: они почти не видны в коде и проявляются только под объёмом данных и трафиком. Поэтому их нельзя найти на глаз — нужны измерения. Slow query log показывает, какие запросы выполняются дольше порога и как часто, а EXPLAIN раскрывает, почему конкретный запрос медленный: читает по индексу или сканирует таблицу, сколько строк перебирает, создаёт ли временные таблицы. Без этих инструментов оптимизация превращается в гадание, а с ними — в инженерную работу с предсказуемым результатом.
Что меняет адресная оптимизация
Адресная оптимизация бьёт не по всему подряд, а по тем нескольким запросам, которые дают основной вклад в медленную работу. На типичном проекте достаточно переписать три-пять самых тяжёлых обращений, чтобы страница, открывавшаяся секундами, начала отвечать за десятки миллисекунд. Мы убираем запросы из циклов, собирая данные одной выборкой. Переводим фильтры на индексируемые поля и добавляем недостающие индексы. Чистим выборки от лишних полей и строк. Кешируем результаты там, где данные меняются редко. И переписываем сами SQL-запросы по плану EXPLAIN, убирая лишние соединения и подзапросы. Каждое изменение проверяется замером: видно, как упало время и число прочитанных строк.
Важно, что оптимизация запросов — это часть более широкой работы по ускорению. Если узкое место не только в базе, но и в кеше, верстке или сервере, мы подключаем смежные направления. Глубокая настройка самой СУБД, индексов на уровне сервера и параметров движка — это оптимизация MySQL и PostgreSQL для Битрикс, которая хорошо дополняет переписывание запросов. А если нужно сперва точно понять, какие именно запросы тормозят и сколько их, начинают с услуги аудит медленных SQL-запросов на Битрикс — на нём собирается полная картина по slow query log и строится план. Все эти услуги относятся к направлению база данных и запросы, и мы подбираем нужную комбинацию под конкретный проект.
Чем переписывание запросов отличается от наращивания железа
Мощный сервер действительно ускоряет всё разом — на время. Но он не меняет того, что запрос читает лишние строки и сканирует таблицы. С ростом каталога и трафика база снова упирается в потолок, только уже на более дорогом железе, и апгрейд приходится повторять. Это бесконечная гонка, в которой стоимость инфраструктуры растёт быстрее выручки. Переписанный запрос, наоборот, остаётся быстрым при любом разумном объёме данных: если он читает по индексу сотни строк вместо миллионов, то и на выросшей базе он отработает быстро. Один раз вложившись в оптимизацию, вы получаете эффект, который сохраняется и экономит на железе в долгую.
Со штатным программистом ситуация мягче, но риск тот же: без замеров и понимания планов выполнения правки делаются наугад. Добавили индекс на всё подряд — замедлили запись и раздули базу. Переписали запрос на ощупь — изменили логику и получили баг. Мы работаем иначе: сначала измеряем, потом меняем, потом снова измеряем. Каждое решение подтверждается данными до и после, поэтому ни логика проекта, ни его обновляемость не страдают.
Когда оптимизация запросов окупается, а когда хватит малого
Мы не уговариваем всех подряд заказывать глубокую оптимизацию. Она оправдана, когда база реально стала узким местом: страницы тормозят под объёмом данных, сервер базы регулярно показывает высокую нагрузку, slow query log полон тяжёлых запросов. В этом случае переписывание окупается ускорением страниц, снятой нагрузкой и отложенным апгрейдом железа. Если же проект небольшой, данных немного, а тормозит он по другой причине — например, из-за выключенного кеша или медленного хостинга, — иногда достаточно точечной правки, и городить полноценную оптимизацию запросов не нужно. На бесплатном аудите мы честно говорим, в чём корень проблемы и что выгоднее сделать в первую очередь.
Как мы ведём работу
Старт — это снятие базовых метрик. Мы включаем сбор медленных запросов, профилируем типовые страницы и фиксируем текущее время ответа и нагрузку на базу. Без этой точки отсчёта невозможно доказать эффект, поэтому мы всегда начинаем с измерений. Дальше строим список самых дорогих и частых запросов и разбираем каждый через EXPLAIN: смотрим тип доступа, число прочитанных строк, использование индексов и временных таблиц. На основе этого решаем, что делать с конкретным запросом — добавить индекс, переписать выборку, убрать N+1 или закешировать результат.
Дальше идём по приоритету: сначала самые тяжёлые запросы, потом менее значимые. Каждое изменение прогоняем под нагрузкой и сверяем план и время до и после. Если запрос стал читать по индексу сотни строк вместо миллионов, а время упало в разы — изменение принято. Все правки вносим аккуратно, не трогая ядро Битрикса напрямую, чтобы обновления проходили без конфликтов. По итогам передаём отчёт: список переписанных запросов, добавленных индексов, метрики до и после и рекомендации, как не плодить тяжёлые запросы в дальнейшей разработке.
Сценарии, под которые мы оптимизируем
Проекты разные, и оптимизация подстраивается под характер нагрузки. Для интернет-магазина с большим каталогом ключевой болью обычно становятся фильтр и листинг: умный фильтр по десяткам свойств на сотнях тысяч товаров порождает тяжёлые запросы, которые умножаются на число посетителей. Здесь мы переводим фильтрацию на индексируемые поля, оптимизируем работу со свойствами инфоблоков и кешируем результаты выборок — каталог начинает отдаваться быстро даже под трафиком.
Для B2B-портала и личных кабинетов узким местом чаще оказывается N+1: страница кабинета собирает заказы, документы и взаиморасчёты контрагента запросами в цикле. Мы заменяем их одной выборкой по списку, и страница, открывавшаяся секундами, начинает летать. Для HighLoad-проектов на первый план выходит пиковая нагрузка на сервер базы: в часы пик база упирается в процессор или диск из-за нескольких частых тяжёлых запросов. Их переписывание и кеширование снимают пик и позволяют держать рост трафика без апгрейда железа.
Чем точечная оптимизация выгоднее альтернатив
У бизнеса обычно три пути ускорить медленную базу: нарастить железо, переписать архитектуру целиком или адресно оптимизировать запросы. Наращивание железа дорого в долгую и лишь откладывает проблему. Полная переделка архитектуры оправдана редко — она долгая, рискованная и обычно избыточная, потому что узкое место сидит в нескольких конкретных запросах, а не во всём проекте. Адресная оптимизация запросов попадает ровно в причину: минимальными изменениями она даёт максимальный прирост, не ломая остальное и не требуя долгой переделки.
Именно поэтому мы начинаем с измерений и идём по приоритету. Вы платите за работу по тем запросам, которые реально тормозят, а не за абстрактное улучшение всего сразу. Эффект виден сразу и подтверждается метриками, а вложения окупаются ускорением страниц и снятой нагрузкой на базу. Когда данных и трафика становится больше, переписанные запросы продолжают работать быстро, и проект не упирается в потолок там, где раньше вставал.
Гарантии и прозрачность
Объём работ и стоимость мы фиксируем после короткого аудита slow query log, чтобы вы понимали, за что платите. Каждое изменение сопровождается замером до и после: видно, как изменился план выполнения, время ответа и нагрузка. Мы не правим ядро Битрикса напрямую и не делаем рискованных изменений без подтверждения метриками, поэтому логика и обновляемость проекта сохраняются. По итогам вы получаете отчёт с переписанными запросами, добавленными индексами и прозрачными цифрами прироста. Развивать проект дальше сможет как наша команда, так и ваши разработчики — мы передаём не только результат, но и понимание, как его сохранить. Отдельно фиксируем, какие места кода чаще всего порождали тяжёлые запросы, и даём короткий чек-лист для код-ревью, чтобы новые фичи не возвращали базу в прежнее состояние. При желании настраиваем регулярный мониторинг медленных запросов, который заранее подсвечивает деградацию, пока она не стала заметной пользователям.
Возражения, которые мы слышим чаще всего
«У нас уже стоит мощный сервер, зачем оптимизировать запросы». Мощный сервер ускоряет всё на время, но не лечит причину: неоптимальный запрос читает лишние строки и снова упрётся в потолок с ростом данных. Оптимизация делает запрос быстрым в принципе, а не за счёт временного запаса железа. «Боимся, что переписывание сломает логику». Мы меняем запросы измеримо и аккуратно, сверяя результат до и после, и не трогаем ядро напрямую — риск поломки минимален, а каждое изменение откатываемо. «Это надолго и дорого». Наоборот: адресная работа по нескольким тяжёлым запросам обычно занимает дни, а не месяцы, и даёт прирост скорости, который виден сразу и сохраняется надолго.
С чего начать
Начните с аудита. Дайте нам доступ к проекту или его копии — мы включим slow query log, соберём список тяжёлых запросов и покажем, что именно тормозит и насколько. По итогам вы получите честную картину: какие запросы дают основную задержку, что переписать в первую очередь, какой прирост это даст и за какой срок. Аудит медленных запросов проводим без обязательств, а дальше вы решаете, делать оптимизацию своими силами по нашему плану или доверить её нам. Обсудим ваш проект — и превратим базу данных из узкого места в незаметный быстрый слой, который спокойно держит рост.
Частые вопросы об оптимизации SQL-запросов
Что такое оптимизация SQL-запросов простыми словами? +
Это поиск и переписывание тяжёлых обращений к базе данных, из-за которых страницы открываются медленно. Мы находим, какие запросы выполняются дольше всего, разбираем, почему они медленные, и меняем их так, чтобы база отвечала за миллисекунды. Проще говоря, мы учим базу делать ту же работу, но в разы быстрее.
Что такое slow query log? +
Это журнал медленных запросов, который ведёт сама база данных. В него попадают все запросы, выполнявшиеся дольше заданного порога, вместе со временем и частотой. Slow query log — главный инструмент диагностики: по нему видно, какие именно запросы тормозят проект, а не приходится гадать по симптомам.
Что показывает команда EXPLAIN? +
EXPLAIN раскрывает план выполнения запроса: как база собирается его выполнять. Видно тип доступа (читает по индексу или сканирует таблицу целиком), сколько строк она перебирает, какие индексы использует и создаёт ли временные таблицы. Это позволяет понять причину медленного запроса и точно решить, что в нём исправить.
Что такое проблема N+1? +
Это когда код делает один запрос на список и ещё по отдельному запросу на каждый его элемент. На списке из ста элементов получается сто один запрос вместо двух. N+1 почти не виден в коде, но сильно тормозит страницы под объёмом данных. Лечится сбором всех данных одной выборкой по списку идентификаторов.
Что такое индекс в базе данных? +
Индекс — это структура, которая помогает базе быстро находить нужные строки, не читая всю таблицу. Без подходящего индекса фильтр или сортировка заставляют базу перебирать все строки целиком, а с индексом она сразу идёт к нужным. Правильные индексы под реальные фильтры — один из главных рычагов ускорения запросов.
Как вы находите тяжёлые запросы? +
Включаем slow query log и профилировщик, прогоняем типовые страницы под нагрузкой и собираем список самых дорогих и частых обращений к базе. Обычно основную задержку дают всего несколько запросов — их мы и разбираем через EXPLAIN в первую очередь. Это адресный подход вместо переписывания всего подряд.
Можно ли провести диагностику без остановки сайта? +
Да. Сбор медленных запросов и профилирование не требуют остановки и почти не влияют на работу проекта. Мы снимаем метрики на работающем сайте или его копии, поэтому пользователи ничего не замечают. Изменения вносим аккуратно и при необходимости на копии, а на боевой проект выкатываем проверенными.
Сколько запросов обычно даёт основную задержку? +
Чаще всего работает правило: около 80 процентов задержки приходится на три-пять самых тяжёлых и частых запросов. Поэтому нет смысла трогать всё подряд — мы выделяем эти ключевые запросы и переписываем их. Эффект от такой точечной работы максимальный на вложенные часы.
Чем оптимизация запросов отличается от общей оптимизации скорости? +
Общая оптимизация работает сразу со всеми слоями: кеш, верстка, картинки, сервер. Оптимизация запросов сфокусирована на одном слое — базе данных и обращениях к ней. Если узкое место именно в базе, эта услуга даёт прицельный эффект. Часто её совмещают с настройкой кеша и сервера, но фокус остаётся на запросах.
Вы добавляете индексы на все колонки сразу? +
Нет. Лишние индексы замедляют запись и раздувают базу. Мы добавляем индексы только под реальные фильтры и сортировки, которые видны в плане EXPLAIN, и проверяем, что запрос действительно стал читать по индексу. Это точечная, а не массовая индексация.
Как вы оптимизируете фильтрацию инфоблоков? +
Переводим фильтр на индексируемые поля, правим параметры выборки, убираем фильтрацию по неиндексированным свойствам, которая сканирует всю таблицу. При активном умном фильтре дополнительно кешируем результаты. В итоге фильтр каталога начинает отдаваться быстро даже под трафиком и на большом числе товаров.
Что вы делаете с getList и выборками ORM? +
Чистим список запрашиваемых полей до нужных, добавляем фильтры и лимиты, убираем избыточные runtime-поля и лишние соединения. Часто getList тянет все поля и лишние строки, которые потом отбрасываются — мы оставляем ровно то, что используется. Это снижает объём чтения и ускоряет выборку.
Поможет ли просто включить кеширование? +
Кеш снимает повторные обращения, но не лечит сам тяжёлый запрос: на первом хите и при сбросе кеша он всё равно отработает медленно. Поэтому мы сначала переписываем запрос, а потом кешируем результат. Так быстро во всех случаях, а не только при попадании в кеш, и пики нагрузки не проваливают сайт.
Что вы делаете с самими тяжёлыми SQL-запросами? +
Разбираем план через EXPLAIN и переписываем: убираем лишние JOIN и подзапросы, заменяем SELECT по всем полям на нужные колонки, добавляем индексы под условия и сортировку. Цель — чтобы запрос читал сотни строк по индексу вместо миллионов сканированием. Логику при этом сохраняем неизменной.
Кешируете ли вы результаты тяжёлых выборок? +
Да, там где данные меняются редко. После того как сам запрос переписан и стал быстрым, мы дополнительно кешируем его результат и компоненты с управляемым кешем, чтобы снять повторные обращения к базе на каждом хите. Сброс кеша настраиваем по событиям изменения данных, поэтому в кеше не залёживаются устаревшие значения.
Насколько реально ускорить страницы? +
На проектах с тяжёлыми запросами время ответа на проблемных разделах падает в разы, а иногда в десятки раз — особенно когда лечится N+1 или фильтр без индекса. Точную цифру называем после аудита: она зависит от того, насколько неоптимальны текущие запросы. Эффект всегда подтверждаем замерами до и после.
Не сломает ли переписывание логику сайта? +
Нет. Мы меняем запросы измеримо и аккуратно, сверяя результат до и после, и не трогаем ядро Битрикса напрямую. Каждое изменение откатываемо, а при необходимости отрабатывается на копии проекта. Цель — та же логика, но быстрее, поэтому риск поломки минимален.
Сохранится ли результат при росте данных? +
Да, в этом и смысл адресной оптимизации. Если запрос стал читать по индексу сотни строк вместо миллионов, он останется быстрым и на выросшей базе. В отличие от наращивания железа, которое лишь откладывает проблему, переписанный запрос даёт устойчивый эффект при разумном росте данных и трафика.
Чем оптимизация запросов лучше покупки мощного сервера? +
Мощный сервер ускоряет всё на время, но не меняет того, что запрос читает лишние строки — с ростом данных база снова упрётся в потолок, уже на более дорогом железе. Оптимизация делает запрос быстрым в принципе и экономит на инфраструктуре в долгую. Часто после неё запланированный апгрейд железа удаётся отложить.
Сколько стоит оптимизация SQL-запросов? +
Экспресс-аудит с поиском тяжёлых запросов и планом обычно начинается от 25 000 рублей, переписывание тяжёлых запросов с индексами — от 60 000, глубокая работа для нагруженных проектов — от 140 000. Цена зависит от объёма базы, числа тяжёлых запросов и сложности логики. Точную смету присылаем после короткого аудита.
За какой срок реально получить результат? +
Сбор slow query log и разбор планов занимают пару дней, переписывание ключевых запросов — от нескольких дней до пары недель в зависимости от объёма. Часто первые заметные ускорения видны уже на второй-третий день, когда переписаны самые тяжёлые запросы. Точный срок фиксируем после аудита.
Можно ли заказать только аудит запросов? +
Да. Экспресс-аудит — это отдельная услуга: мы собираем slow query log, разбираем планы и даём список тяжёлых запросов с приоритетами и планом оптимизации. Дальше вы решаете, делать переписывание своими силами по нашему плану или доверить его нам. Аудит ни к чему не обязывает.
Что мы получаем по итогу работы? +
Ускоренные страницы, разгруженную базу и отчёт: список переписанных запросов, добавленных индексов, метрики времени и нагрузки до и после, а также рекомендации, как не плодить тяжёлые запросы дальше. Результат остаётся вашим, а развивать проект сможет как наша команда, так и ваши разработчики.
Нужна ли отдельная настройка самой базы данных? +
Иногда да. Переписывание запросов и индексы дают основной эффект, но на нагруженных проектах их хорошо дополняет настройка самой СУБД — параметров движка, буферов и индексов на уровне сервера. Это отдельное направление; если оно нужно, мы скажем об этом на аудите и предложим совместить работы.
Найдём и перепишем ваши тяжёлые запросы?
Расскажите о проекте и симптомах — соберём slow query log, покажем самые тяжёлые запросы и пришлём план оптимизации с оценкой эффекта.
- Ответим в течение рабочего дня
- Бесплатный аудит процессов и расчёт
- NDA и фиксированная смета