MySql:为什么这个查询运行得如此之慢?

时间:2009-11-17 16:22:51

标签: sql mysql performance

好的所以我有这个购物车中的产品清单。我正在尝试将所有相关项目检索到购物车中的商品,而不会拉出购物车中的任何商品。

我写了这个查询,它完全按照我想要的方式提取,但它的运行时间为8秒。

SELECT * FROM cart_product 
WHERE product_id 
IN(
    SELECT product_related_related_id FROM `cart_product_related` 
    WHERE product_related_product_id 
    IN (5401,5402,4983,5004)
) 
AND product_id 
NOT IN(5401,5402,4983,5004)
  

显示行0 - 2(共3行,查询   花了7.9240秒)

我有什么方法可以优化它以使其运行得更快?

谢谢!

2 个答案:

答案 0 :(得分:9)

你应该用JOIN替换子查询,它应该加快速度。

这样的事情:

SELECT DISTINCT cart_product.* FROM cart_product 
  INNER JOIN cart_product_related ON product_id = product_related_related_id
WHERE product_related_product_id IN (5401,5402,4983,5004)
  AND product_id NOT IN(5401,5402,4983,5004)

答案 1 :(得分:0)

尝试在product_related_product_id和product_id上添加索引(如果您还没有)。除非您有大量数据,否则我只能猜测您当前没有这些字段的索引。

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

CREATE INDEX idxProductRelatedProductId ON cart_product(int);

沿着这些方向的东西。我无法访问mysql 5并且暂时没有使用它,但这应该是关闭的。

相关问题