Оптимизация одного запроса

Рейтинг: 1Ответов: 2Опубликовано: 27.03.2015

Приветствую!

Помогите оптимизировать несколько строк на битрикс, дело в том, что данная конструкция грузит сайт 15 сек.! А без неё 1 сек. Что делать, ума не приложу. (

$arFilter = Array(
    "IBLOCK_ID"=>7,
    "PROPERTY_MODEL"=>$arItem['PROPERTY_MODEL_VALUE'],
    "ACTIVE"=>"Y"
);
$arSelect = Array("ID", "NAME");                
$res2 = CIBlockElement::GetList(Array(),$arFilter, false, Array(), $arSelect);
while($ob2 = $res2->GetNextElement())
{
     $arFields2 = $ob2->GetFields();
     $modaid=$arFields2['ID']; 
}

Ответы

▲ 2

Если нет необходимости в ограничении результатов, то 4-м параметром стоит указать false. Также вместо двух методов GetNextElement и GetFields, думаю, стоит использовать просто GetNext.

$arFilter = Array(
  "IBLOCK_ID" => 7,
  "PROPERTY_MODEL" => $arItem['PROPERTY_MODEL_VALUE'],
  "ACTIVE" => "Y"
);

$arSelect = Array("ID", "NAME");
$res2 = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
while($ar2 = $res2->GetNext()) {
  $modaid=$ar2['ID'];
}

http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php

▲ 1

Судя по тому, что у вас переменная названа $res2, вы скорее всего делаете запросы в цикле. Так делать не рекомендуется, как раз из-за низкой производительности и большой нагрузки на базу.

Разбейте код на части. Сначала один GetList, собираете нужные данные в массив. Потом делаете проверку, что массив не пустой и, если проверка пройдена, делаете второй GetList и.т.д.