320  /  382
Справочник

Оптимизация запросов к БД

Просмотров: 58555
Дата последнего изменения: 09.07.2024
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5

  Пример оптимизации запроса

Всегда минимизируйте запросы. Например, если в цикле идет запрос к элементу ИБ, то уже необходимо задуматься над минимизацией. Да, это займет больше времени, но вам скажут спасибо клиенты.

Нельзя:

foreach($arResult["ORDERS"] as $key => $val)
{
	foreach($val["BASKET_ITEMS"] as $vvval)
	{
		$rsEls = CIBlockElement::GetByID();
	}
}

Следует:

$arIDs = array();
foreach($arResult["ORDERS"] as $key => $val)
	{
		foreach($val["BASKET_ITEMS"] as $vvval)
		{
			$arIDs[] = $vvval["PRODUCT_ID"];
		}
	}
if(!empty($arIDs))
{
	$rsEls = CIBlockElement::GetList(array(), array("ID" => $arIDs));
	...
}

foreach($arResult["ORDERS"] as $key => $val)
{
	foreach($val["BASKET_ITEMS"] as $vvval)
	{
		//наполняем данные, налаживая соответствие ID-ков
	}
}

Фактически, вы сводите порой десятки, если не сотни, запросов к одному.

  Специальные методы

Если для какого-либо изменения в БД предусмотрен специальный метод, то следует использовать именно его, а не более общий метод изменения БД.

Хороший пример - модуль интернет-магазина и работа с заказом: можно изменить флаг оплаты заказа путем CSaleOrder::Update, а можно путем CSaleOrder::PayOrder. Так вот, следует применять именно PayOrder, потому что в нем произойдет вызов соответствующих обработчиков.

Даже если вам надо изменить множество полей (того же заказа) и флаг оплаты, то произведите изменение через PayOrder, а затем уже апдейт остальных полей.


35
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии