【发布时间】:2015-07-09 12:45:21
【问题描述】:
我正在尝试加速返回大量结果的 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
【问题讨论】:
-
相关子查询会很慢。你能改变吗?
-
我试图移动那些子查询(计数等)并将它们放在一个 forloop 中。因此,获取结果并在 for 循环中获取计数,在另一个 for 循环中获取名称等。但不幸的是,我没有看到结果检索速度的任何变化
-
没有。不是循环。只是一个不相关的子查询 - 实际上只是后两个的连接,因为其中没有聚合。另外,
WEEKOFYEAR(date_purchased) IS NOT NULL肯定与date_puchased IS NOT NULL相同?? -
是的 date_purchased 是一样的。因此,如果我使用不相关的子查询,您认为它会更快吗?因为现在它几乎无法使用:)
-
如果
ps_view_orders_w_attributes_ordered是一个常规的索引表,那么是的。
标签: mysql database query-optimization