Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!
Допустим имеется у нас инфоблок с предложениями продавцов. В каждом предложении у нас есть поле с привязкой к продавцу. Продавец - это запись в другом инфоблоке. Делать обращение к продавцам при обработке каждого предложения - затратно и нелогично.
Делаем следующим образом. Сначала перебираем все предложения и записываем все возможные значения продавцов (ID записи в инфоблоке продавцов) в отдельный массив при этом ключами (!). Т.е. обрабатывая запись мы получили ID продавца = 100, делаем ключ в массив $arSellers[100] = 1. В итоге получаем массив продавцов, где ключи - ID продавцов, а значения везде = 1. Массив имеет вид:
В ходе этой обработки, допустим, мы можем $arSellers[100] заменить на значения элемента с ID = 100. Получим некий справочник продавцов.
Ну и далее вы этот справочник можете использовать как душе угодно - вставить в выборку предложений, вывести в шаблоне название и ссылку на продавца. Тут по сути всего 2 запроса (хотя на практике может быть чуть больше, допустим 4 или 5). Ну и разумеется, лучше всё это хозяйство кэшировать.
Спасибо, заменили на предложенный вами механизм, надеюсь получится ускорить.
Пока, к сожалению, не сильно заметно, т.к. выбирается большой объем данных.
Какие еще могут быть варианты оптимизации для подобных структур данных?
Во-первых, можно не перебирать все для получения ID продавцов, а заполнять массив по мере получения информации о товарах. Во-вторых, не пытались оптимизировать запросы в GetList? Приведите пример кода - возможно, сумеем помочь. Ну и как вариант, попробуйте сменить структуру инфоблоков.