【发布时间】:2014-09-25 23:00:50
【问题描述】:
我是 MySQL 数据库优化的新手。
我的查询很慢:
SELECT COUNT(DISTINCT p.product_id) AS total
FROM shs_product p
LEFT JOIN shs_product_description pd
ON (p.product_id = pd.product_id)
LEFT JOIN shs_product_to_store p2s
ON (p.product_id = p2s.product_id)
LEFT JOIN shs_product_to_category p2c
ON (p.product_id = p2c.product_id)
WHERE pd.language_id = '1'
AND p.status = '1'
AND p.date_available <= NOW()
AND p2s.store_id = '$
任何人都可以就创建索引以加快查询速度提出建议吗? 您会推荐哪个表和哪个列?
任何帮助将不胜感激...
【问题讨论】:
-
只是补充一点:这个和其他查询导致高 CPU 使用率/负载。我也在努力处理 my.cnf 文件,但我失败了。如果有人能提出建议,我将不胜感激。
-
您的查询没有按照您的想法执行。您的左联接实际上是内部联接。将表连接的条件移至所述 JOIN 的 ON 子句。
-
不确定这是否会提高速度..但是您正在使用此查询措辞的方式将左连接减少为内连接...当找不到记录时左连接会产生空值(内部join 过滤掉它们)。 where p2s.store_ID = '$ 表示任何具有空值的记录(包含的记录,因为您离开加入)最终在这个 where 子句中被过滤掉(IE,这个查询也可能是所有内部连接)。并不是真正的速度帮助,只是想确保您意识到这一点。 p2c 的左连接似乎无关紧要。
-
谢谢你,塞巴斯;如何将表连接上的条件移至 ON 子句?