Я пытаюсь ускорить запрос mysql, который возвращает много результатов. Идея состоит в том, чтобы показать некоторые результаты, разделенные категориями/неделями и т. Д. Но для их загрузки требуется всегда. Это совершенно непригодно.Ускорить запрос mysql, который возвращает много результатов
Можете ли вы предложить решение? Каковы мои варианты, когда мне приходится иметь дело с такими ситуациями?
SELECT DISTINCT vowao.id_product_attribute, WEEKOFYEAR(vowao.date_purchased) AS week,
YEAR(vowao.date_purchased) AS year,
(SELECT COUNT(*)
FROM ps_view_orders_w_attributes_ordered vowao_s
WHERE WEEKOFYEAR(vowao_s.date_purchased) = WEEKOFYEAR(vowao.date_purchased)
AND vowao_s.id_product_attribute = vowao.id_product_attribute
) AS amount_sold,
(SELECT al.public_name
FROM ps_attribute_lang al
WHERE al.id_attribute = vpac.id_attribute
AND al.id_lang='2'
) AS name,
(SELECT al.id_attribute
FROM ps_attribute_lang al
WHERE al.id_attribute = vpac.id_attribute
AND al.id_lang='2'
) AS id_attribute
FROM `ps_view_orders_w_attributes_ordered` vowao
JOIN `ps_view_product_attribute_combination` vpac
ON vpac.id_product_attribute = vowao.id_product_attribute
WHERE vowao.id_shop = '".$id_shop."'
AND vpac.is_color_group = 1
AND WEEKOFYEAR(vowao.date_purchased) IS NOT NULL
AND YEAR(vowao.date_purchased) = 2015
Корреляционный подзапрос будет медленным. Можете ли вы это изменить. – Strawberry
Я попытался переместить эти подзапросы (счет и т. Д.) И поместить их в ловушку. Так что получите результаты и в цикле for get count, в другом для цикла - имя и т. Д. Но я не видел никаких изменений в отношении того, как быстро получаются результаты, к сожалению – shieldcy
№ Нет. Просто некоррелированный подзапрос - infact просто соединение для вторых двух, так как в них нет агрегации. Кроме того, конечно, 'WEEKOFYEAR (date_purchased) НЕ НУЛЛ' - это то же самое, что' date_puchased IS NOT NULL' ?? – Strawberry