慢mysql查询获取产品ID及其类别ID

时间:2014-01-21 14:07:14

标签: mysql sql

我需要帮助这个简单的SQL查询,这个查询耗尽我的服务器内存:

SELECT p.product_id, c.category_id 
FROM product p, product_to_category ptc, category c     
WHERE p.status = "1" AND     
p.product_id = ptc.product_id AND
c.category_id = ptc.category_id
GROUP BY p.product_id;

它出了什么问题?我只想获得产品ID以及该产品属于哪个类别。

2 个答案:

答案 0 :(得分:1)

您不需要category表。

SELECT p.product_id, ptc.category_id 
FROM product p, product_to_category ptc     
WHERE p.status="1" 
    AND p.product_id=ptc.product_id

加入

SELECT p.product_id, ptc.category_id 
FROM product p
JOIN product_to_category ptc  
    ON p.product_id=ptc.product_id 
WHERE p.status="1"

答案 1 :(得分:0)

您的查询似乎不太可能具有如此差的性能。但是,您可以先使用显式join语法来简化查询:

SELECT p.product_id, c.category_id 
FROM product p join
     product_to_category ptc
     on p.product_id = ptc.product_id join
     category c 
     on c.category_id = ptc.category_id   
WHERE p.status="1" 
GROUP BY p.product_id;

一些可能性:

  • 如果您错过了where子句中的某个条件,则可能会生成大量行。
  • 您的桌子对于您正在使用的系统来说非常大。
  • 您实际上已用尽聚合的临时存储空间,并且您的临时空间已满