На сайте обновляю товары с помощью "Импорт из Excel. Загрузка каталога товаров 1С-Битрикс" (kda.importexcel).
В каталоге несколько десятков тысяч товаров. Обновление идет очень долго (несколько часов).
Можно ли это как-то ускорить?
Скорость обновления импортом зависит от того, насколько быстро в БД можно найти товар, который требуется обновить.
Технически, чтобы такой поиск работал быстро, нужно, чтобы в БД было проиндексировано поле, по которому модуль импорта ищет товар.
У Битрикса для элементов инфоблоков индексируется только одно поле, которое можно использовать в рамках импорта: символьный код (CODE).
Поэтому:
- Если для идентификации элемента используется (только или вкупе с другими полями) поле CODE, импорт будет работать быстро.
- Если CODE не используется для идентификации, импорт будет работать медленно.
Пример: для БД в 160 тысяч товаров поиск только по ИМЕНИ занимает 0.5 секунды. Поиск по CODE происходит практически мгновенно. Соответственно, при переходе с идентификации по имени на идентификацию по CODE возможно ускорение импорта более, чем в 10 раз.
Также замечено, что импорт идет долго, если для идентификации элемента, помимо "Наименования" и "Символьного кода", выбрано какое-либо свойство (пункт, который начинается со слова "Свойство ...").
Несмотря на то, что "Наименование" тоже выбрано для идентификации, импорт с использованием Артикула идет более, чем в 10 раз дольше.
Поэтому рекомендуется использовать для идентификации только основные поля инфоблока, а не дополнительные свойства.
Основные поля - это вот эти:
По сути для импорта подходят только два:
- Название
- Символьный код
Для частного случая, когда для идентификации используется Наименование элемента, а настроить импорт с использованием поля CODE возможности нет, можно сделать в БД индекс по колонке NAME:
create index i_name on b_iblock_element(NAME);
Такие случаи возможны, например, когда в файле импорта нет идентификаторов, которые можно было бы засунуть в CODE, или когда CODE на сайте настраивается вручную (например, для красивых url) и его нельзя обновлять импортом.