好的所以我有这个购物车中的产品清单。我正在尝试将所有相关项目检索到购物车中的商品,而不会拉出购物车中的任何商品。
我写了这个查询,它完全按照我想要的方式提取,但它的运行时间为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秒)
我有什么方法可以优化它以使其运行得更快?
谢谢!
答案 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并且暂时没有使用它,但这应该是关闭的。