2009-11-17 247 views
1

好吧,所以我有这个购物车中的产品清单。我正在尝试将所有相关物品检索到购物车中的物品,而不用拉动购物车中的任何物品。MySql:为什么此查询运行速度如此之慢?

我写了这个查询,它确切地拉我想要的,但它需要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秒)

有一些方法我可以优化这使其运行速度更快?

谢谢!

+1

如果不能看到表格模式,很难回答这个问题。 (例如,我们不知道您设置了哪些索引等) – 2009-11-17 16:31:00

回答

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) 
+0

完美,谢谢! – 2009-11-17 16:34:58

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并且暂时没有使用过它,但这应该是非常接近的。

相关问题