2009-11-17 103 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並且暫時沒有使用過它,但這應該是非常接近的。

相關問題