-15%Скидка 15% на разработку сайта или магазина при старте до конца месяца
Ускорение и производительность

Оптимизация Highload-блоков на Битрикс для миллионов записей

Ускоряем работу с большими справочниками на 1С-Битрикс: индексы Highload-блоков, лёгкие ORM-выборки, правильные типы полей, кеширование и быстрые фильтры. Каталог и фильтр на миллионах записей перестают тормозить.

10+ летна тяжёлых проектах Битрикс
млнзаписей в справочниках
до ×20ускорение выборок
ORMправильные индексы и типы
HL индекс ORM кеш · фильтр выборка по фильтру миллисекунды вместо секунд досекунды
Что делаем

Из чего складывается оптимизация Highload-блоков

Разбираем справочник целиком: от структуры таблицы и индексов до ORM-выборок, кеша и связки с каталогом и фильтром. Каждый шаг измеряем профилировщиком запросов.

Индексы под реальные запросы

Добавляем индексы Highload-блока под фактические фильтры и сортировки, убираем неработающие.

Правильные типы полей

Приводим поля к числам, датам, спискам и привязкам, чтобы сравнения и сортировки были быстрыми.

Лёгкие ORM-выборки

Переписываем выборки на нужные поля, runtime-поля и группировки без перебора всей таблицы.

Кеширование выборок

Кешируем тяжёлые выборки с тегированным сбросом, повторные запросы отдаём из памяти.

Быстрые фильтры по справочнику

Оптимизируем выборки по фильтрам, фасетам и диапазонам, чтобы фильтрация шла по индексу.

Интеграция с каталогом

Ускоряем связку Highload-блока с каталогом и умным фильтром, чтобы справочник не тормозил витрину.

Подробно об услуге

Оптимизация Highload-блоков: что это и зачем большим данным

Highload-блок в 1С-Битрикс — это отдельная таблица в базе данных, рассчитанная на большие справочники: характеристики товаров, города, контрагенты, объявления, любые наборы данных, которым тесно в инфоблоках. Сам по себе механизм способен держать миллионы записей и отдавать их быстро, но только при одном условии — если структура таблицы, индексы, типы полей и выборки настроены под реальные запросы проекта. Когда справочник растёт, а его никто не оптимизировал, Highload-блок превращается из помощника в главный тормоз: каждая выборка по фильтру заставляет базу перебирать всю таблицу строку за строкой.

Оптимизация Highload-блоков — это приведение большого справочника к состоянию, в котором он работает быстро на любом объёме данных. Мы разбираем, как именно проект обращается к справочнику, какие фильтры, сортировки и выборки идут чаще всего, и под эти реальные запросы выстраиваем индексы, корректируем типы полей, переписываем тяжёлые ORM-выборки и подключаем кеширование. Отдельно занимаемся связкой справочника с каталогом и умным фильтром, потому что чаще всего тормозит не сам Highload-блок в вакууме, а вся витрина, которая ждёт от него данные.

Из чего складывается работа

Под капотом оптимизация объединяет несколько направлений, каждое из которых снимает свой кусок медлительности. Индексы делают выборку по фильтру мгновенной: вместо перебора миллионов строк база идёт прямо к нужным записям по индексу. Правильные типы полей ускоряют сравнения и сортировки — число сравнивается быстрее строки, дата корректно упорядочивается, привязка работает как ссылка, а не как текст. Лёгкие ORM-выборки возвращают ровно те поля, что нужны странице, а не весь объём со связанными сущностями. Кеширование снимает повторную нагрузку: один раз посчитанная выборка отдаётся из памяти, пока данные не изменились.

Главные направления оптимизации Highload-блоков:

  • индексы под фактические фильтры, сортировки и диапазоны выборок справочника;
  • правильные типы полей — числа, даты, списки и привязки вместо строк;
  • лёгкие ORM-выборки с select нужных полей, runtime-полями и постраничной навигацией;
  • кеширование тяжёлых выборок с тегированным сбросом при изменении записей;
  • быстрые выборки по фильтрам, фасетам и диапазонам без перебора всей таблицы;
  • оптимизация связки справочник—каталог—умный фильтр на больших объёмах.

Кому нужна оптимизация Highload-блоков

Работа окупается там, где справочник вырос до сотен тысяч и миллионов записей и стал заметен на скорости проекта. Это интернет-магазины с большим набором характеристик и умным фильтром, B2B-порталы с тысячами контрагентов и персональными ценами, агрегаторы и площадки с миллионами объявлений, отраслевые каталоги и геосервисы с огромными справочниками. Общий признак один: пользователь ставит фильтр или открывает каталог, а страница ждёт ответа базы — секунду, две, иногда больше. Чем больше записей и чем сложнее условия выборки, тем сильнее заметна разница после оптимизации.

Отдельная ценность — для проектов, где справочник тесно связан с каталогом. Когда фасетный фильтр строится по полям Highload-блока, любая медленная выборка по справочнику тормозит всю витрину, а под нагрузкой база и вовсе уходит в потолок. Здесь мало ускорить отдельный запрос — нужно выстроить всю цепочку от структуры справочника до вывода каталога, чтобы тяжёлые данные не задерживали страницу.

Как устроена оптимизация

Мы не угадываем и не ставим индексы наугад. Начинаем с профилирования: снимаем реальные медленные выборки по справочнику под рабочей нагрузкой, смотрим планы запросов и определяем, где база перебирает лишнее. По этим данным становится видно, какие индексы нужны, какие типы полей мешают, какие выборки тянут слишком много. Дальше готовим изменения на копии проекта, проверяем корректность данных после миграций, сверяем время выборок до и после — и только потом переносим всё на боевой сайт. Такой подход исключает сюрпризы: на боевом проекте ничего не ломается, а результат подтверждён замерами.

Результат оптимизации Highload-блоков — это справочник, который остаётся быстрым на миллионах записей. Выборки по фильтрам идут из индекса за миллисекунды, каталог и умный фильтр перестают ждать базу, нагрузка в пике падает, а проект спокойно держит рост данных. Пользователь видит мгновенную фильтрацию вместо секунд ожидания, а сервер справляется с трафиком без расширения железа.

Где Highload-блок тормозит

Почему большой справочник на Битрикс замедляет весь проект

Highload-блок задумывался для миллионов записей, но без индексов, правильных типов полей и аккуратных ORM-выборок он превращается в узкое место: каждый фильтр перебирает всю таблицу, а каталог ждёт ответа базы.

Выборка по фильтру в Highload-блоке тянется секундами — база перебирает миллионы строк целиком.
Ставим индексы под реальные фильтры и сортировки, выборка идёт по индексу за миллисекунды.
Поля справочника заведены строками, поэтому сравнения и сортировки работают медленно и неточно.
Приводим типы полей к числовым, датам и ссылкам, чтобы база сравнивала их быстро и корректно.
ORM-выборка тянет все поля и связанные сущности, хотя нужны два-три значения.
Переписываем выборки на select нужных полей, runtime-поля и постраничную навигацию без перебора всего.
Каждый запрос к справочнику бьёт в базу заново — кеша нет, нагрузка растёт с трафиком.
Подключаем кеширование выборок и тегированный сброс, повторные запросы отдаются из памяти.
Highload-блок связан с каталогом и фильтром, и тормозит уже не справочник, а вся витрина.
Оптимизируем связку справочник—каталог—умный фильтр, чтобы тяжёлые данные не задерживали страницу.
Как это работает

Путь выборки по большому справочнику

Запрос приходит с фильтром, попадает в индекс Highload-блока, лёгкая ORM-выборка берёт нужные поля, результат кешируется и отдаётся каталогу без перебора всей таблицы.

Фильтрусловия запроса Индексбез перебора ORMнужные поля Кешиз памяти ката-лог млн строк миллисекунды вместо секунд
Фильтр → индекс → лёгкая ORM-выборка → кеш → каталог.
Сравнение

Кому доверить оптимизацию Highload-блоков

Критерий Своими силамиФрилансерСтудия B2Bsite
Подход к индексам Индексы ставят наугад, без анализа реальных запросовЗакроет точечный запрос, но без системного разбораИндексы строим по профилю медленных запросов и плану
Профилирование Профилирование выборок обычно не ведётсяПрофилирует выборочно и не всегда повторяемоКаждый шаг меряем профилировщиком до и после
Типы полей и миграции Типы полей оставляют как есть, строки вместо чиселМеняет типы полей осторожно, боится миграцийТипы полей и миграции готовим с проверкой на копии
Кеширование Кеш и тегированный сброс настраивают редкоКеширование делает базовое, без стратегии сбросаКеш выборок с тегированным сбросом по событиям
Каталог и фильтр Риск замедлить каталог при изменении справочникаСвязку с каталогом и фильтром трогает неохотноОптимизируем связку справочник—каталог—фильтр целиком
Этапы работы

Как мы оптимизируем Highload-блоки

01

Профилирование

Снимаем медленные выборки по справочнику, планы запросов и тяжёлые фильтры под реальной нагрузкой.

02

Структура и индексы

Проверяем типы полей и индексы Highload-блока, готовим план изменений под фактические запросы.

03

Правки на копии

Меняем типы, добавляем индексы и переписываем ORM-выборки на копии, сверяем результат и время.

04

Кеш и фильтры

Подключаем кеширование выборок и ускоряем фильтрацию, настраиваем тегированный сброс кеша.

05

Связка с каталогом

Оптимизируем интеграцию справочника с каталогом и умным фильтром, проверяем витрину целиком.

06

Замеры и перенос

Сверяем метрики до и после, переносим изменения на боевой проект и фиксируем результат.

Сроки

Сколько занимает оптимизация Highload-блоков

1–2 дня Аудит справочников: профиль медленных выборок, планы запросов, узкие места.
1
2–4 дня Индексы и типы полей: правки структуры на копии и проверка корректности данных.
2
3–5 дней ORM-выборки и кеш: переписываем тяжёлые выборки и подключаем кеширование.
3
2–3 дня Связка с каталогом и фильтром: оптимизация витрины и фасетного поиска.
4
1–2 дня Контрольные замеры и перенос изменений на боевой проект с отчётом.
5
Калькулятор услуги

Сколько времени вернёт ускорение справочника

Прикиньте, сколько секунд ожидания съедают тяжёлые выборки по Highload-блоку и сколько времени вернёт оптимизация, когда фильтры и каталог начнут отвечать из индекса и кеша.

Сэкономленное время ожидания в месяц 0 ₽

Оценка по формуле: выборок в день × текущее время × процент ускорения × 30 дней. Это ориентир сэкономленного времени ожидания, а не гарантия.

Тарифы

Сколько стоит оптимизация Highload-блоков

Стоимость зависит от числа справочников, объёма записей и связки с каталогом. Ниже — ориентиры; точную смету присылаем после бесплатного аудита.

Экспресс-аудит
от 25 000 ₽
Срок: 2–3 дня

Профилирование выборок и план ускорения Highload-блоков.

  • Профиль медленных выборок
  • Анализ индексов и типов полей
  • Оценка нагрузки на базу
  • План оптимизации с приоритетами
Популярный выбор
Оптимизация справочников
от 70 000 ₽
Срок: от 1 недели

Индексы, типы полей, лёгкие ORM-выборки и кеширование.

  • Индексы под реальные запросы
  • Правильные типы полей и миграции
  • Переписанные ORM-выборки
  • Кеширование с тегированным сбросом
  • Замеры до и после
Highload под нагрузку
от 160 000 ₽
Срок: от 3 недель

Справочники на миллионы записей в связке с каталогом и фильтром.

  • Все работы тарифа «Оптимизация»
  • Связка с каталогом и умным фильтром
  • Фасетный поиск по справочнику
  • Проектирование под рост данных
  • Сопровождение и повторные замеры
Экспресс-аудит от 25 000 ₽
Срок: 2–3 дня

Профилирование выборок и план ускорения Highload-блоков.

  • Профиль медленных выборок
  • Анализ индексов и типов полей
  • Оценка нагрузки на базу
  • План оптимизации с приоритетами
Популярный Оптимизация справочников от 70 000 ₽
Срок: от 1 недели

Индексы, типы полей, лёгкие ORM-выборки и кеширование.

  • Индексы под реальные запросы
  • Правильные типы полей и миграции
  • Переписанные ORM-выборки
  • Кеширование с тегированным сбросом
  • Замеры до и после
Highload под нагрузку от 160 000 ₽
Срок: от 3 недель

Справочники на миллионы записей в связке с каталогом и фильтром.

  • Все работы тарифа «Оптимизация»
  • Связка с каталогом и умным фильтром
  • Фасетный поиск по справочнику
  • Проектирование под рост данных
  • Сопровождение и повторные замеры

Дополнительные опции

Оптимизация умного фильтра по справочнику от 40 000 ₽
Перенос справочника на новую структуру полей от 50 000 ₽
Мониторинг медленных запросов к Highload-блокам от 30 000 ₽
Умный расчёт

Подберём оптимизацию под ваши справочники

Ответьте на несколько вопросов о Highload-блоках, объёме записей и связке с каталогом — предложим набор работ и сроки под вашу задачу.

Вопрос 1
Загрузка вопроса…

Примеры работ

Кейсы оптимизации Highload-блоков

Интернет-магазин

Справочник характеристик на 4 млн записей

Поставили индексы под фильтры, переписали ORM-выборки и подключили кеш — умный фильтр стал отвечать мгновенно.

−92%Время фильтра
4 млнЗаписей
−55%Нагрузка базы
B2B-портал

Справочник контрагентов и цен в каталоге

Привели типы полей к числам и датам, добавили индексы и кеширование выборок — каталог перестал ждать справочник.

×18Выборка
−70%Каталог TTFB
2 неделиСрок
Агрегатор

Highload-блок объявлений с фасетным поиском

Оптимизировали связку справочник—каталог—фильтр и фасеты, выдача по сложным условиям ускорилась в разы.

×12Фасетный поиск
9 млнЗаписей
−60%Пик нагрузки
Отзывы клиентов

Что говорят после оптимизации справочников

«Справочник характеристик на несколько миллионов строк тормозил весь каталог. Команда сняла профиль, поставила индексы и переписала выборки — фильтр стал летать, а нагрузка на базу заметно упала.»

Алексей Технический директор, интернет-магазин

«Понравилось, что каждый шаг подтверждали замерами до и после. Изменения типов полей и миграции делали на копии, на боевом ничего не сломалось. Каталог перестал ждать ответа справочника.»

Марина Руководитель IT, B2B-поставщик

«У нас Highload-блок объявлений с фасетным поиском на миллионы записей. Оптимизировали связку с фильтром и кеш — выдача по сложным условиям ускорилась в разы, серверы стали спокойнее.»

Дмитрий Владелец агрегатора
Почему мы

На что можно рассчитывать по договору

Решения по замерам

Не угадываем: каждый индекс и каждую выборку подтверждаем профилировщиком до и после.

Безопасные миграции

Изменения типов полей и структуры готовим на копии и проверяем корректность данных.

Видим всю связку

Оптимизируем не только справочник, но и его интеграцию с каталогом и умным фильтром.

Прозрачный отчёт

Показываем, что было и что стало: время выборок, нагрузка на базу, план запросов.

База знаний

Частые вопросы о Highload-блоках — и наш ответ

Это не общие советы из интернета, а закономерности из реальных проектов с большими справочниками. Каждый ответ — позиция нашей команды.

Индексы

Поставили индекс, а выборка всё равно медленная

Наш ответ

Чаще всего индекс не совпадает с условием запроса: фильтр идёт по другому полю или комбинации полей, либо мешает приведение типов. Снимаем план запроса, смотрим, какой индекс реально используется, и строим составной индекс под фактический фильтр и сортировку.

Типы полей

Можно ли менять типы полей в работающем Highload-блоке

Наш ответ

Да, но аккуратно. Меняем типы на копии, проверяем, что данные конвертируются без потерь, и только потом переносим миграцию на боевой проект. Перевод строковых полей в числа и даты обычно сразу ускоряет сравнения и сортировки.

ORM

Выборка по ORM тянет слишком много и грузит память

Наш ответ

Указываем в select только нужные поля, выносим тяжёлые вычисления в runtime-поля и используем постраничную навигацию вместо выборки всего справочника. Так база возвращает ровно то, что нужно странице, а не весь объём.

Кеш

Кеш справочника отдаёт устаревшие данные

Наш ответ

Настраиваем тегированное кеширование: выборка кешируется с тегом, а при изменении записей справочника кеш по этому тегу сбрасывается автоматически. Тогда повторные запросы быстрые, а данные остаются актуальными.

Экспертный взгляд

Почему Highload-блок тормозит и как его правильно ускорить

Highload-блоки в Битрикс окружены двумя крайностями. Одни считают, что само название гарантирует скорость на любом объёме, и складывают в справочник миллионы записей, не задумываясь о структуре. Другие, наоборот, боятся больших справочников и тянут тяжёлые данные в обычные инфоблоки, где они тормозят ещё сильнее. Истина в том, что Highload-блок — это инструмент, а не магия: он действительно создан для больших данных, но раскрывается только при правильных индексах, типах полей и аккуратных выборках. Ниже разбираем, почему справочники тормозят, как мы их ускоряем и чем системная оптимизация отличается от точечной правки.

Почему большой справочник начинает тормозить

Главная причина проста: база вынуждена перебирать всю таблицу. Когда в Highload-блоке нет индекса под фильтр, любой запрос вроде выборки по характеристике или диапазону цен заставляет движок прочитать каждую строку и проверить условие. На тысяче записей это незаметно, на миллионе — секунды ожидания на каждый запрос. Добавьте сюда строковые поля там, где должны быть числа или даты: сравнение строк медленнее и часто работает неверно, сортировка по такому полю идёт лексикографически, а не по значению. В итоге справочник, который технически способен на миллионы записей, на практике еле тянет сотни тысяч.

Вторая причина — тяжёлые выборки. Типичная ошибка: ORM-выборка тянет все поля справочника и связанные сущности, хотя странице нужны два-три значения. База честно собирает весь объём, передаёт его в PHP, тот раздувает память и время ответа. Когда такая выборка вызывается на каждой странице каталога, а кеша нет, нагрузка растёт пропорционально трафику. Третья причина — связка с каталогом: фасетный фильтр строит условия по полям Highload-блока, и одна медленная выборка по справочнику тормозит уже не строку, а всю витрину, которую ждёт пользователь.

Что меняет правильная оптимизация

Оптимизация снимает каждую из этих причин по отдельности и проверяет результат на цифрах. Индексы под реальные фильтры превращают перебор миллионов строк в точечный доступ: база идёт прямо к нужным записям. Правильные типы полей ускоряют сравнения и делают сортировки корректными. Лёгкие ORM-выборки возвращают ровно нужные поля с постраничной навигацией, поэтому память и время ответа перестают зависеть от размера справочника. Кеширование с тегированным сбросом снимает повторную нагрузку: один раз посчитанная выборка отдаётся из памяти, пока записи не изменились, а при изменении кеш сбрасывается автоматически и данные остаются актуальными.

Отдельно мы выстраиваем всю цепочку справочник—каталог—умный фильтр. Здесь недостаточно ускорить один запрос: нужно, чтобы фасеты строились по индексированным полям, выборки не дублировались, а тяжёлые операции кешировались на правильном уровне. Эта работа естественно продолжается в смежных услугах: ускорении каталога и e-commerce, где справочник встроен в витрину и фильтр. А когда тормозят не только справочники, но и запросы по всему проекту, мы переходим к более широкой оптимизации базы данных и запросов.

Чем системная оптимизация отличается от точечной правки

Можно ускорить один медленный запрос — поставить индекс, который подсказала ошибка в логах, и закрыть тикет. Иногда этого достаточно. Но на большом справочнике точечные правки быстро упираются в потолок: ускорили одну выборку, а рядом тормозят пять других, изменили тип поля — поехала сортировка в каталоге, добавили кеш — он отдаёт устаревшие данные. Системная оптимизация начинается с профилирования: мы снимаем реальные медленные запросы под рабочей нагрузкой и видим всю картину, а не отдельный симптом. Затем строим план, в котором индексы, типы полей, выборки и кеш согласованы между собой и со связкой каталога.

Такой подход важен ещё и потому, что справочники редко живут изолированно. Они связаны с товарами, фильтрами, ценами, импортом из 1С. Меняя структуру в одном месте, легко сломать другое, если не видеть всей картины. Поэтому изменения мы готовим на копии проекта, проверяем корректность данных после миграций и сверяем поведение каталога целиком, прежде чем переносить на боевой сайт.

Как мы ведём работу

Старт — это аудит справочников. Мы снимаем профиль медленных выборок, смотрим планы запросов, оцениваем нагрузку на базу в пике и определяем, какие Highload-блоки и какие операции дают основную задержку. На основе этого собираем план оптимизации с приоритетами: что ускорять в первую очередь и какой эффект это даст. План фиксируем до начала работ, чтобы вы понимали состав и стоимость заранее.

Дальше идём по плану. Добавляем индексы под фактические фильтры и сортировки, приводим типы полей к числам, датам и привязкам, переписываем тяжёлые ORM-выборки на select нужных полей и постраничную навигацию, подключаем кеширование с тегированным сбросом. Каждый шаг проверяем профилировщиком: фиксируем время выборки до и после, чтобы видеть конкретный прирост. Изменения структуры и миграции прогоняем на копии и сверяем корректность данных, поэтому на боевом проекте ничего не ломается.

Связка с каталогом и фильтром

Когда справочник встроен в каталог, мы доводим оптимизацию до конца цепочки. Проверяем, что фасетный фильтр строит условия по индексированным полям, а не по строкам, что выборки по диапазонам и спискам идут из индекса, что тяжёлые фасеты кешируются на правильном уровне и не пересчитываются на каждой странице. Если умный фильтр перебирает справочник целиком при каждом запросе, ускоряем именно эту связку. Результат виден сразу: каталог открывается без задержки, фильтрация по характеристикам идёт мгновенно, а под нагрузкой витрина держится спокойно, потому что справочник перестал быть узким местом.

Возражения, которые мы слышим чаще всего

«У нас всего пара миллионов записей, разве это много для Highload-блока». Дело не в абсолютном числе, а в том, есть ли под запросы индексы и какие выборки идут по справочнику. Без индексов и миллион строк тормозит, а с правильной структурой и десяток миллионов отвечает мгновенно. Мы смотрим не на размер таблицы, а на то, как проект к ней обращается.

«Боимся менять типы полей на работающем проекте». Это разумная осторожность, и мы её разделяем. Поэтому миграции делаем на копии, проверяем, что данные конвертируются без потерь, и переносим изменения на боевой сайт только после сверки. Перевод строковых полей в числа и даты обычно сразу ускоряет сравнения и сортировки и не несёт рисков, если выполнен аккуратно.

«Поставим индекс — и всё ускорится». Иногда да, но часто индекс не совпадает с условием запроса или его перебивает приведение типов, и выборка остаётся медленной. Поэтому мы строим индексы по плану запроса, а не по интуиции, и проверяем, какой индекс реально используется базой. Калькулятор на этой странице помогает заранее прикинуть, сколько времени ожидания вернёт ускорение в вашем случае.

Сценарии, под которые мы оптимизируем справочники

Большие данные бывают очень разными, и подход подстраивается под структуру конкретного проекта. Для интернет-магазина с богатым набором характеристик главное — ускорить фасетный фильтр: пользователь отмечает свойства, диапазоны и бренды, и каждая комбинация должна отрабатывать мгновенно. Здесь мы строим составные индексы под частые комбинации фильтров, переносим тяжёлые фасеты в кеш и следим, чтобы сортировка по цене и популярности шла по числовым полям, а не по строкам.

Для B2B-портала со справочником контрагентов и персональных цен на первый план выходят выборки, привязанные к авторизованному клиенту: его условия, его доступный ассортимент, его остатки. Такие выборки должны быть лёгкими и кешироваться по пользователю, чтобы каталог не пересчитывал персональные данные при каждом запросе. Для агрегаторов и площадок с миллионами объявлений критична скорость поиска по множеству условий сразу, поэтому мы оптимизируем фасетный поиск и разбиваем тяжёлые операции на индексированные и кешируемые части. Для геосервисов и отраслевых каталогов с огромными справочниками важны быстрые выборки по диапазонам, спискам и привязкам — их мы тоже выводим на индексы.

Чем системная оптимизация выгоднее наращивания железа

Когда справочник начинает тормозить, первая мысль — добавить мощности серверу: больше памяти, быстрее диски, мощнее процессор. Иногда это даёт временное облегчение, но проблему не решает: неоптимизированная выборка по миллионам строк остаётся медленной, просто чуть менее заметно, а с ростом данных и трафика упирается в потолок снова. Вы платите за железо ежемесячно, а узкое место никуда не уходит. Правильные индексы, типы полей и кеш делают выборку быстрой в принципе, поэтому тот же сервер начинает держать кратно больше нагрузки.

Системная оптимизация выгоднее ещё и тем, что её результат остаётся с проектом надолго. Один раз выстроенная структура справочника, согласованные индексы и кеш продолжают работать при росте данных, а не требуют постоянной доплаты за ресурсы. Когда оборот и объём справочников растут, именно этот путь оказывается и дешевле в долгую, и устойчивее по скорости. Расширение железа мы предлагаем только там, где оно действительно нужно после оптимизации, а не вместо неё.

Этапы работы по шагам

Чтобы проект был предсказуемым, мы разбиваем его на понятные этапы с результатом на каждом. Первый этап — аудит справочников: снимаем профиль медленных выборок, планы запросов и нагрузку на базу, определяем приоритеты. Второй — работа со структурой: приводим типы полей к числам, датам и привязкам и готовим миграции на копии. Третий — индексы: строим их под фактические фильтры и сортировки по плану запросов и убираем неработающие. Четвёртый — выборки: переписываем тяжёлые ORM-выборки на нужные поля, runtime-поля и постраничную навигацию.

Дальше подключаем кеширование тяжёлых выборок с тегированным сбросом и оптимизируем связку справочника с каталогом и умным фильтром, проверяя витрину целиком. Каждый шаг сопровождаем замерами до и после, поэтому виден конкретный прирост. Финальный этап — перенос проверенных изменений на боевой проект и отчёт с метриками. После запуска предлагаем мониторинг медленных запросов и сопровождение, чтобы справочник оставался быстрым по мере роста данных, но проект полностью остаётся под вашим контролем.

Что вы получаете по итогу

По завершении работ вы получаете справочник, который остаётся быстрым на миллионах записей, и отчёт с замерами до и после: время тяжёлых выборок, нагрузка на базу, планы ключевых запросов. Изменения внесены аккуратно, без правки ядра напрямую и без риска для обновлений, а структура справочника готова к дальнейшему росту данных. Каталог и умный фильтр перестают ждать базу, сервер спокойнее проходит пики, а пользователь видит мгновенную фильтрацию вместо секунд ожидания.

Мы не привязываем вас к себе: все изменения документируем, индексы и миграции описываем, а сопровождение предлагаем, но не навязываем. Развивать проект сможет как наша команда, так и ваши разработчики. Начать стоит с бесплатного аудита справочников — по его итогам вы получите честную картину: какие Highload-блоки тормозят, что ускорять в первую очередь и какой эффект это даст. Обсудим ваш проект и превратим тяжёлые справочники в быструю основу каталога.

Вопросы и ответы

Частые вопросы об оптимизации Highload-блоков

Что такое Highload-блок простыми словами? +

Это отдельная таблица в базе данных Битрикс, рассчитанная на большие справочники — характеристики товаров, города, контрагентов, объявления. В отличие от инфоблоков, она хранит однотипные записи и способна держать миллионы строк, отдавая их быстро, если правильно настроены индексы, типы полей и выборки.

Чем Highload-блок отличается от инфоблока? +

Инфоблок универсален и удобен для контента, но на больших объёмах однотипных данных он тяжёлый: значения свойств хранятся в общих таблицах и выборки усложняются. Highload-блок — это плоская таблица под конкретный справочник, по ней проще строить индексы и быстрые выборки. Большие наборы данных правильнее держать именно в Highload-блоках.

Что значит оптимизировать Highload-блок? +

Это привести справочник к состоянию, в котором он быстро работает на любом объёме: поставить индексы под реальные фильтры, исправить типы полей, переписать тяжёлые ORM-выборки, подключить кеширование и ускорить связку с каталогом и фильтром. Каждый шаг подтверждается замерами времени выборок до и после.

Сколько записей считается большим справочником? +

Дело не в абсолютном числе, а в наличии индексов и характере выборок. Без индексов и миллион строк тормозит, а с правильной структурой десятки миллионов отвечают мгновенно. Обычно оптимизация заметна уже с сотен тысяч записей, особенно если справочник связан с умным фильтром.

Зачем вообще выносить данные в Highload-блок? +

Чтобы большие однотипные справочники не утяжеляли инфоблоки и работали быстро. Highload-блок даёт плоскую таблицу, по которой удобно строить индексы и лёгкие выборки. Это правильное место для миллионов характеристик, объявлений или контрагентов, которым тесно в обычной структуре.

Как индексы ускоряют выборку по справочнику? +

Без индекса база перебирает всю таблицу строку за строкой, проверяя условие на каждой записи. Индекс позволяет идти сразу к нужным строкам, минуя перебор. На миллионах записей это превращает секунды ожидания в миллисекунды. Мы строим индексы под фактические фильтры и сортировки, а не наугад.

Поставили индекс, а быстрее не стало — почему? +

Чаще всего индекс не совпадает с условием запроса: фильтр идёт по другому полю или комбинации полей, либо мешает приведение типов при сравнении. Мы снимаем план запроса, смотрим, какой индекс реально использует база, и строим составной индекс под конкретный фильтр и сортировку.

Почему важны правильные типы полей? +

Число сравнивается быстрее строки, дата корректно упорядочивается, привязка работает как ссылка. Если число или дата заведены строкой, сравнения медленнее, а сортировка идёт лексикографически и даёт неверный порядок. Приведение типов к числам и датам обычно сразу ускоряет выборки и сортировки.

Можно ли менять типы полей в работающем справочнике? +

Да, но аккуратно. Меняем типы на копии проекта, проверяем, что данные конвертируются без потерь, и только потом переносим миграцию на боевой сайт. Так перевод строковых полей в числа и даты проходит безопасно и сразу даёт прирост скорости.

Не замедлят ли лишние индексы запись данных? +

Каждый индекс немного замедляет вставку и обновление, поэтому мы не плодим их без нужды. Ставим только те индексы, которые реально используются частыми выборками, и убираем неработающие. Баланс между скоростью чтения и записи подбираем по профилю нагрузки вашего справочника.

Что не так с тяжёлыми ORM-выборками? +

Типичная ошибка — тянуть все поля справочника и связанные сущности, когда странице нужны два-три значения. База собирает весь объём, передаёт его в PHP, растут память и время ответа. Мы указываем в select только нужные поля, выносим вычисления в runtime-поля и добавляем постраничную навигацию.

Что такое runtime-поля и зачем они нужны? +

Это вычисляемые на лету поля и связи, которые добавляются в выборку без изменения структуры таблицы. Они позволяют присоединять данные, считать агрегаты и фильтровать по производным значениям прямо в запросе. Грамотные runtime-поля убирают лишние запросы и перенос вычислений в PHP.

Как кеширование помогает большим справочникам? +

Один раз посчитанная тяжёлая выборка сохраняется в кеше и отдаётся из памяти, пока данные не изменились. Это снимает повторную нагрузку на базу: при росте трафика она не пересчитывает одно и то же. Кеш особенно важен для фасетов и тяжёлых выборок каталога.

Кеш справочника отдаёт устаревшие данные — что делать? +

Настраиваем тегированное кеширование: выборка кешируется с тегом, а при изменении записей справочника кеш по этому тегу сбрасывается автоматически. Тогда повторные запросы остаются быстрыми, а данные всегда актуальны. Ручной сброс при этом не нужен.

Что значит постраничная навигация по справочнику? +

Это выборка данных порциями — по странице, а не всего объёма сразу. Вместо того чтобы тянуть миллион строк и резать их в PHP, база возвращает только нужную страницу. Это снижает память и время ответа и делает листание каталога быстрым независимо от размера справочника.

Почему из-за справочника тормозит весь каталог? +

Фасетный умный фильтр строит условия по полям Highload-блока. Если выборка по справочнику медленная, ждёт уже не строка, а вся витрина каталога. Поэтому мы оптимизируем не только справочник, но и всю связку справочник—каталог—фильтр, чтобы тяжёлые данные не задерживали страницу.

Как ускорить умный фильтр по характеристикам? +

Проверяем, что фасеты строятся по индексированным полям, а не по строкам, что выборки по диапазонам и спискам идут из индекса, и что тяжёлые фасеты кешируются, а не пересчитываются на каждой странице. Если фильтр перебирает справочник целиком при каждом запросе, ускоряем именно эту связку.

Поможет ли оптимизация при импорте из 1С? +

Да. Справочники часто наполняются импортом, и большой импорт сам по себе нагружает базу. Мы следим, чтобы индексы и кеш правильно вели себя при обновлении данных, а тегированный сброс срабатывал после импорта, чтобы каталог сразу показывал актуальные данные без устаревшего кеша.

Чем это отличается от ускорения каталога целиком? +

Оптимизация Highload-блоков фокусируется на справочнике как источнике данных, а ускорение каталога охватывает всю витрину: компоненты, кеш страниц, фронтенд. Часто работы дополняют друг друга, поэтому мы начинаем со справочника, а при необходимости переходим к ускорению каталога и e-commerce целиком.

С чего начинается оптимизация? +

С профилирования. Снимаем реальные медленные выборки по справочнику под рабочей нагрузкой, смотрим планы запросов и оцениваем нагрузку на базу в пике. По этим данным становится видно, какие индексы нужны, какие типы полей мешают и какие выборки тянут лишнее. Только потом строим план работ.

Не сломаются ли данные при оптимизации? +

Нет. Изменения структуры и миграции мы готовим и прогоняем на копии проекта, проверяем корректность данных после конвертации и сверяем поведение каталога. На боевой сайт переносим только проверенные изменения, поэтому работающий проект не страдает.

Как вы подтверждаете результат? +

Замерами до и после. Для каждого шага фиксируем время тяжёлых выборок, нагрузку на базу и планы ключевых запросов профилировщиком. В итоговом отчёте видно конкретный прирост — например, во сколько раз ускорилась выборка и насколько упала нагрузка в пике.

Сколько занимает оптимизация Highload-блоков? +

Аудит справочников — один-два дня, базовая оптимизация индексов, типов полей и выборок — от недели, полная работа со связкой каталога и фильтром на больших объёмах — от трёх недель. Точный срок зависит от числа справочников и объёма данных, мы фиксируем его в смете до старта.

Не сломается ли всё при обновлении Битрикса? +

Нет. Изменения вносим аккуратно, не правя ядро напрямую: индексы, типы полей, оптимизированные выборки и кеш живут в структуре справочника и собственном коде. Поэтому обновления платформы проходят без конфликтов, а структура остаётся понятной для дальнейшего развития.

Эффект после оптимизации

Что меняется в цифрах

до ×20
ускорение выборок по справочнику
−90%
времени тяжёлого фильтра по Highload-блоку
млн+
записей работают без деградации
−60%
нагрузки на базу в пике

Ориентиры по проектам нашей команды. Точный прирост оценим на бесплатном аудите ваших Highload-блоков.

Начать проект

Ускорим ваши Highload-блоки?

Расскажите о справочниках, объёме записей и связке с каталогом — снимем профиль медленных выборок и предложим план оптимизации со сроками.

  • Ответим в течение рабочего дня
  • Бесплатный аудит процессов и расчёт
  • NDA и фиксированная смета