【发布时间】:2014-07-21 06:46:36
【问题描述】:
SELECT distinct text FROM oc_product_attribute as pa
LEFT JOIN oc_product_to_category as ptc ON pa.product_id = ptc.product_id
LEFT JOIN oc_product as p ON pa.product_id = ptc.product_id
WHERE p.status = 1 AND ptc.category_id = 61
GROUP BY pa.text LIMIT 10
尽管我使用 LIMIT,但我的数据库挂起上述查询。有什么办法优化吗?
【问题讨论】:
-
使用前 10 名而不是限制。
-
您是否在要加入的列上使用索引?
-
@DH__ -
TOP不是LIMIT的 SQL 版本吗?这是 MySQL。请注意,除非pa.text被索引(并且优化器足够聪明/可以利用它),否则数据库必须获取所有行,对它们进行排序,然后选择所需的 10/throw其他一切都消失了。 -
您的 WHERE 子句将 LEFT JOIN 更改为 INNER JOIN,因为它的条件检查 LEFT JOINed 表的字段。如果这不是您的意图,请将这些条件移至相应的
ON子句。此外,您应该使用 EXPLAIN并将结果与 SHOW CREATE TABLE 的结果一起发布在这里 -
你为什么使用
DISTINCT text和GROUP BY pa.text。两者都试图在这里做同样的事情。文本列是什么数据类型?