我正在执行此查询以获取我网站上每个类别的产品数量
SELECT COUNT(DISTINCT p.product_id) AS total
FROM category_path cp
LEFT JOIN product_to_category p2c ON (cp.category_id = p2c.category_id)
LEFT JOIN product p ON (p2c.product_id = p.product_id)
LEFT JOIN product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id)
WHERE pd.language_id = '1'
AND p.status = '1'
AND p.date_available <= NOW()
AND p2s.store_id = '0'
AND cp.path_id = '20'
AND p.is_family ='1';
在我的本地计算机上,它可以正常工作并在.02
内返回结果+-------+
| total |
+-------+
| 392 |
+-------+
1 row in set (0.02 sec)`
但是当我在我的服务器上执行相同的查询时,需要很多次
+-------+
| total |
+-------+
| 412 |
+-------+
1 row in set (0.78 sec)
我搜索了任何可能的解决方案,但我没有找到,如果有人可以帮我找到我会欣赏的原因。
答案 0 :(得分:1)
您可以尝试建立索引列
示例 - :
ALTER TABLE `table` ADD INDEX `product_id` (`product_id`);
ALTER TABLE `table` ADD INDEX `language_id` (`language_id`);
ALTER TABLE `table` ADD INDEX `status` (`status`);
ALTER TABLE `table` ADD INDEX `date_available` (`date_available`);
ALTER TABLE `table` ADD INDEX `store_id` (`store_id`);
ALTER TABLE `table` ADD INDEX `path_id` (`path_id`);
ALTER TABLE `table` ADD INDEX `is_family` (`is_family`);
答案 1 :(得分:1)
LEFT
。它可能会抑制优化。p
需要复合INDEX(is_family, status, date_available)