【发布时间】:2013-01-16 18:27:07
【问题描述】:
我遇到了系统过载的问题。 下面的查询是从 3 个表中获取数据,其中 2 个表的记录超过 10.000 条,运行时间为 50 秒。
SELECT DISTINCT
p.prod_name,
p.prod_price,
Sum(dt.vt_qtd) as total_qtd
FROM tdb_products p
LEFT JOIN tdb_sales_temp dt ON p.prod_mp_id = dt.vt_product
LEFT JOIN tdb_sales s ON dt.vt_cupom = s.sl_coupom
WHERE
s.sl_day = $day_link AND
s.sl_mon = $mon_link AND
s.sl_year = $year_link
GROUP BY
p.prod_name
ORDER BY
p.prod_name ASC
这正常吗?
已解决!
【问题讨论】:
-
你有什么索引?
-
我注意到您在 WHERE 子句中使用了单独的日、月和年列。如果将它们组合为带有索引的单个
DATE列,则可能会产生很大影响(加上所有 DATE 函数的好处) -
使用
GROUP BY,是否需要DISTINCT? -
@halfter:因为数据库很乐意接受 prod_name 分组并同时选择 prod_name 和 prod_price,所以它可能是 MySQL。
-
@halfer: ungrouped
prod_price在SELECT列表中我认为几乎可以解释它
标签: mysql sql performance