在电子商务网站上查询速度慢(选择产品)

时间:2012-06-04 10:40:31

标签: php mysql e-commerce

SELECT products.* 
FROM products 
LEFT JOIN product_category 
    ON products.id_product = product_category.id_produs 
LEFT JOIN categories 
    ON product_category.id_category = categories.id_category
INNER JOIN options 
    ON products.id_product = options.id_product 
WHERE categories.id_category = '472' 
AND product_category.id_category = categories.id_category
LIMIT 0, 20

您好,我正在开设一个电子商务网站进行编程竞赛,我在类别页面上遇到了一些问题,这些问题将列出产品。

在MySQL中有4个表:产品,类别,product_category(包含类别和产品的关系)和选项。选项表包含您可以选择购买的产品的各种属性(如重量,高度,颜色)。我需要在类别页面上调用这些,因为有一个产品过滤器,当我选择颜色:红色时,它将显示所有具有属性颜色的产品:红色。

如果我在产品表中有10 000行,并且每个产品都有5个选项,那么选项表将有5万行,问题是查询会很慢,而且需要30秒才能完成展示产品。 我确定问题出在查询上,但我不知道怎么做。我应该在查询中写什么才能在5秒内获得页面上的产品?

2 个答案:

答案 0 :(得分:0)

确保你在这些表的id_category和id_product上有索引,然后在它前面粘贴EXPLAIN,并发布输出,说实话,如果你没有索引,可能会无论如何。

答案 1 :(得分:0)

一些事情:你两次指定这种关系:

AND product_category.id_category = categories.id_category

ON product_category.id_category = categories.id_category

这可能会使数据库优化器混乱。

另一个潜在的优化是将正在执行WHERE子句的列移到表上。将WHERE categories.id_category = '472'变为product_category.id_category = '472' `它会减少加入的记录数量。

正如一些问题中所提到的,EXPLAIN计划会向您显示查询的哪一部分很慢,并告诉您是否缺少索引。