Перейти к содержанию

Лидеры

  1. clayrabbit

    clayrabbit

    Пользователь


    • Баллы

      3

    • Постов

      25


Популярный контент

Показан контент с высокой репутацией 10.07.2025 во всех областях

  1. 67к товаров, 26к связей в hpmodel_links, 2.5к отзывов, вызов getProduct() занимает около 70мс и если на странице в модулях набирается больше 10 товаров получается довольно большая задержка. Удалось ускорить работу метода в 10-15 раз заменив 2 подзапроса к review на один и немного оптимизировав его: --- z_hpm14.ocmod.xml~070725 2025-02-12 14:38:04.067381375 +0300 +++ z_hpm14.ocmod.xml 2025-07-07 08:51:32.842664104 +0300 @@ -169,11 +169,15 @@ </operation> <operation error="skip"> <search index="0"><![CDATA[(SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating]]></search> - <add position="replace"><![CDATA[(SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 LEFT JOIN " . DB_PREFIX . "hpmodel_links hpl ON (r1.product_id = hpl.product_id OR r1.product_id = hpl.parent_id) WHERE (" . ($parent_id !== false ? "hpl.parent_id = '" . (int)$parent_id . "'" : "r1.product_id = p.product_id") . ") AND r1.status = '1' GROUP BY " . ($parent_id !== false ? "hpl.parent_id" : "r1.product_id") . ") AS rating]]></add> + <add position="replace"><![CDATA[(SELECT CONCAT(AVG(rating),';',COUNT(review_id)) FROM " . DB_PREFIX . "review r1" . ($parent_id !== false ? " LEFT JOIN " . DB_PREFIX . "hpmodel_links hpl ON (r1.product_id = hpl.product_id)" : "") . " WHERE r1.product_id = p.product_id" . ($parent_id !== false ? " OR hpl.parent_id = '" . (int)$parent_id . "'" : "") . " AND r1.status = '1' GROUP BY " . ($parent_id !== false ? "hpl.parent_id" : "r1.product_id") . ") AS rating]]></add> </operation> <operation error="skip"> <search index="0"><![CDATA[(SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews]]></search> - <add position="replace"><![CDATA[(SELECT COUNT(DISTINCT review_id) AS total FROM " . DB_PREFIX . "review r2 LEFT JOIN " . DB_PREFIX . "hpmodel_links hpl ON (r2.product_id = hpl.product_id OR r2.product_id = hpl.parent_id) WHERE (" . ($parent_id !== false ? "hpl.parent_id = '" . (int)$parent_id . "'" : "r2.product_id = p.product_id") . ") AND r2.status = '1' GROUP BY " . ($parent_id !== false ? "hpl.parent_id" : "r2.product_id") . ") AS reviews]]></add> + <add><![CDATA[NULL]]></add> + </operation> + <operation error="skip"> + <search index="0"><![CDATA[=> $query->row['reviews'] ? $query->row['reviews'] : 0,]]></search> + <add><![CDATA[=> $query->row['rating'] ? explode(';', $query->row['rating'])[1] : 0,]]></add> </operation> </file>
    3 балла
×
×
  • Создать...