首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >电商网站查询速度慢(选择商品)

电商网站查询速度慢(选择商品)
EN

Stack Overflow用户
提问于 2012-06-04 18:40:31
回答 2查看 341关注 0票数 0
代码语言:javascript
运行
复制
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个表: products、categories、product_category (包含类别和产品的关系)和options。options表包含您可以选择购买的产品的各种属性(如重量、高度、颜色)。我需要在分类页面上调用它们,因为有一个产品过滤器,当我选择color: red时,它将显示属性color: red的所有产品。

如果我在products表中有10000行,而每个产品都有5个选项,那么options表将有50000行,问题是查询将非常慢,并且需要30秒以上的时间来显示产品。我确定问题出在查询上,但我不知道该怎么做。为了在5秒内获得页面上的产品,我应该在查询中写些什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-04 18:54:12

确保在这些表的id_category和id_product上有索引,然后将EXPLAIN放在前面,并发布输出,老实说,如果没有索引,这可能会完成这项工作。

票数 0
EN

Stack Overflow用户

发布于 2012-06-05 08:55:52

有几件事:你指定了这个关系两次:

代码语言:javascript
运行
复制
AND product_category.id_category = categories.id_category

代码语言:javascript
运行
复制
ON product_category.id_category = categories.id_category

这可能会让您的数据库优化器感到困惑。

另一个可能的优化是将正在对WHERE子句执行操作的列上移到表中。把WHERE categories.id_category = '472'改成product_category.id_category = '472' `,会减少加入的记录数量。

正如在一些问题中提到的,EXPLAIN计划将向您显示查询的哪个部分速度较慢,并提示您是否缺少索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10879953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档