Для хранения относительно большого числа объектов в инфоблоке во многих случаях целесообразно воспользоваться режимом хранения объектов инфоблока в отдельной таблице (технология "Инфоблоки 2.0"). Причем для изменения типа хранения объектов в инфоблоке практически не нужно модифицировать приложение (т.е. в большинстве случаев тип хранения можно поменять и после запуска веб-решения).

Хранение объектов инфоблока в отдельной таблице позволяет существенно уменьшить нагрузку на базу данных, сложность и число SQL-запросов, снизить до минимума операции присоединения таблиц - т.к. значения скалярных свойств объекта инфоблока хранятся в одной записи таблицы. Фактически для каждого инфоблока со своим набором свойств создается отдельная SQL-таблица.

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

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

1. На этапе проектирования, как правило, принимается решения хранить определенные объекты веб-проекта в инфоблоках 2.0.
2. После выявления типичных запросов к данным веб-приложения, например: выборка описания товара по его идентификатору (70%), выборка списка товаров в разделе каталога (10%), фильтрация товаров по производителю (5%) и т.п., для каждого инфоблока 2.0 определяются свойства, по которым наиболее часто ожидается выполнение фильтрации. Например, в инфоблоке товаров ожидается интенсивная фильтрация по свойству привязки товара к инфоблоку производителей или по дополнительному коду сертификации и т.п.
   Теперь необходимо проверить, что в таблице, хранящей значения свойств инфоблока товаров, имеется индекс на свойство на свойство, хранящее связь с инфоблоком производителей. В разделе "Контент > Информ. блоки > Типы информ. блоков > Товары" находим идентификатор свойства привязки на вкладке "Свойства" (первая колонка "ID") и на вкладке "Инфоблок" находим значение идентификатора инфоблока (свойство "ID"). Затем находим в базе данных таблицу, хранящую значения свойств инфоблока товаров. Таблицы называются по шаблону: "show create table b_iblock_element_prop_s#ИД инфоблока#", например "b_iblock_element_prop_s1" (s - таблица хранит значения скалярных свойств, m - таблица хранит множественные значение свойств).
   Теперь нужно проверить, чтобы на нужное нам в таблице свойство был добавлен индекс. Выполняем запрос в разделе "Настройки > Инструменты > SQL запрос" (пример синтаксиса для MySQL):
   show create table b_iblock_element_prop_s1
   Возвращается структура таблицы, например:
   CREATE TABLE `b_iblock_element_prop_s1` ( `IBLOCK_ELEMENT_ID` int(11) NOT NULL, `PROPERTY_11` text collate utf8_unicode_ci, `DESCRIPTION_11` varchar(255) collate utf8_unicode_ci default NULL, `PROPERTY_12` decimal(18,4) default NULL, `DESCRIPTION_12` varchar(255) collate utf8_unicode_ci default NULL, `PROPERTY_13` int(11) default NULL, `DESCRIPTION_13` varchar(255) collate utf8_unicode_ci default NULL, `PROPERTY_14` int(11) default NULL, `DESCRIPTION_14` varchar(255) collate utf8_unicode_ci default NULL, PRIMARY KEY (`IBLOCK_ELEMENT_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
   Свойство привязки хранится в нашем случае, например, в колонке `PROPERTY_13`. Как видим, ключ в таблице пока только один:
   "PRIMARY KEY (`IBLOCK_ELEMENT_ID`)".
   Добавляем индекс на колонку:
   alter table b_iblock_element_prop_s1 add index ix_prop13 (PROPERTY_13)
   Теперь выполнив "show create table b_iblock_element_prop_s1" увидим добавленный на свойство индекс:
   KEY `ix_prop13` (`PROPERTY_13`)
   Более подробную информацию об индексах в таблице можно получить, выполнив запрос: "show indexes in b_iblock_element_prop_s1". Аналогично при необходимости добавляются индексы в таблицу, содержащую множественные значения свойств инфоблока. Таким образом, необходимо проверить наличие индексов на все интенсивно фильтруемые свойства инфоблоков, хранимых в формате "2.0".
3. Необходимо удостовериться, что периодически выполняется оптимизация таблиц базы данных (и соответственно индексов) в разделе "Настройки > Инструменты > Оптимизация БД" или средствами системного администрирования (например автоматически). Частота оптимизации определяется объемом хранимых данных и интенсивностью их изменения/добавления. Нередко встречается практика оптимизации всех таблиц базы данных раз в месяц в период минимальной посещаемости веб-проекта.