%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/main/lang/ru/admin/checklist/ |
Current File : //home/bitrix/www/bitrix/modules/main/lang/ru/admin/checklist/QP0080.html |
<p>Для хранения относительно большого числа объектов в инфоблоке во многих случаях целесообразно воспользоваться режимом хранения объектов инфоблока в отдельной таблице (технология "Инфоблоки 2.0"). Причем для изменения типа хранения объектов в инфоблоке практически не нужно модифицировать приложение (т.е. в большинстве случаев тип хранения можно поменять и после запуска веб-решения).</p> <p>Хранение объектов инфоблока в отдельной таблице позволяет существенно уменьшить нагрузку на базу данных, сложность и число SQL-запросов, снизить до минимума операции присоединения таблиц - т.к. значения скалярных свойств объекта инфоблока хранятся в одной записи таблицы. Фактически для каждого инфоблока со своим набором свойств создается отдельная SQL-таблица.</p> <p>Однако, если ожидается высокая частота запросов к данному инфоблоку с фильтрацией по определенным свойствам, эти свойства хорошо известны на фазе аналитики и проектирования, можно значительно повысить скорость запросов и снизить нагрузку на базу данных если добавить на эти свойства индексы в базе данных. При обновлениях платформы Битрикс добавленные индексы будут сохранены.</p> <p>Ускоряя выборки из базы данных путем добавления индексов, не следует забывать о необходимости периодической оптимизации таблиц и индексов. Операцию можно выполнять периодически в разделе "Настройки > Инструменты > Оптимизация БД". </p> <ol> <li>На этапе проектирования, как правило, принимается решения хранить определенные объекты веб-проекта в инфоблоках 2.0.</li> <li>После выявления типичных запросов к данным веб-приложения, например: выборка описания товара по его идентификатору (70%), выборка списка товаров в разделе каталога (10%), фильтрация товаров по производителю (5%) и т.п., для каждого инфоблока 2.0 определяются свойства, по которым наиболее часто ожидается выполнение фильтрации. Например, в инфоблоке товаров ожидается интенсивная фильтрация по свойству привязки товара к инфоблоку производителей или по дополнительному коду сертификации и т.п. <br> Теперь необходимо проверить, что в таблице, хранящей значения свойств инфоблока товаров, имеется индекс на свойство на свойство, хранящее связь с инфоблоком производителей. В разделе "Контент > Информ. блоки > Типы информ. блоков > Товары" находим идентификатор свойства привязки на вкладке "Свойства" (первая колонка "ID") и на вкладке "Инфоблок" находим значение идентификатора инфоблока (свойство "ID"). Затем находим в базе данных таблицу, хранящую значения свойств инфоблока товаров. Таблицы называются по шаблону: "show create table b_iblock_element_prop_s#ИД инфоблока#", например "b_iblock_element_prop_s1" (s - таблица хранит значения скалярных свойств, m - таблица хранит множественные значение свойств). <br>Теперь нужно проверить, чтобы на нужное нам в таблице свойство был добавлен индекс. Выполняем запрос в разделе "Настройки > Инструменты > SQL запрос" (пример синтаксиса для MySQL): <br> <b>show create table b_iblock_element_prop_s1</b> <br><br> Возвращается структура таблицы, например:<br><br> <em> 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</p> </em><br> Свойство привязки хранится в нашем случае, например, в колонке `PROPERTY_13`. Как видим, ключ в таблице пока только один: <br><br>"PRIMARY KEY (`IBLOCK_ELEMENT_ID`)".<br> Добавляем индекс на колонку:<br> <em>alter table b_iblock_element_prop_s1 add index ix_prop13 (PROPERTY_13)</em><br><br> Теперь выполнив "show create table b_iblock_element_prop_s1" увидим добавленный на свойство индекс: <br> <br> KEY `ix_prop13` (`PROPERTY_13`) <br> <br> Более подробную информацию об индексах в таблице можно получить, выполнив запрос: "show indexes in b_iblock_element_prop_s1". Аналогично при необходимости добавляются индексы в таблицу, содержащую множественные значения свойств инфоблока. Таким образом, необходимо проверить наличие индексов на все интенсивно фильтруемые свойства инфоблоков, хранимых в формате "2.0".<br><br> </li> <li>Необходимо удостовериться, что периодически выполняется оптимизация таблиц базы данных (и соответственно индексов) в разделе "Настройки > Инструменты > Оптимизация БД" или средствами системного администрирования (например автоматически). Частота оптимизации определяется объемом хранимых данных и интенсивностью их изменения/добавления. Нередко встречается практика оптимизации всех таблиц базы данных раз в месяц в период минимальной посещаемости веб-проекта.</li> </ol>