首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单选择查询的MySQL性能问题

简单选择查询的MySQL性能问题
EN

Stack Overflow用户
提问于 2016-07-25 12:44:27
回答 2查看 67关注 0票数 1

有一个我不明白的MySQL性能问题。

这个查询通常需要1秒来执行,但有时需要5+分钟。

代码语言:javascript
复制
SELECT  sb.id AS id, sb.name AS name,
ROUND(sb.dkprice / 100, 0) AS price, bs.name AS shopname, country
    FROM  shopbikes sb, categoriesshopbikes csb, shops s
    WHERE  sb.id = csb.`shopbikeid`
      AND  csb.categoryid = 93
      AND  sb.brand = 'Ghost'
      AND  dkprice > 0
      AND  sb.dkprice IS NOT NULL
      AND  sb.`shopid` = s.id
    ORDER BY  dkprice
    LIMIT  1

有时有5-8个这样的查询同时运行,针对不同的品牌。

当我执行“显示完整PROCESSLIST”时,我可以看到许多这些查询正在运行,其中一些查询已经运行了很长时间(最多几分钟)。

查询中的表都有所有相关列(即表所匹配的列)的索引。

表的大小:

  • 购物车=600 000行
  • 类别购物车=100 000行
  • 商店= 100排

你知道哪里出问题了吗?我怎么才能解决呢?

更新:我已将查询转换为显式联接:

代码语言:javascript
复制
SELECT  sb.id AS id, sb.name AS NAME,
ROUND(sb.dkprice / 100, 0) AS price, s.name AS shopname, country
    FROM  shopbikes sb
    JOIN  categoriesshopbikes csb  ON (sb.id = csb.shopbikeid)
    JOIN  shops s  ON (sb.shopid = s.id)
    WHERE  csb.`categoryid` = 93
      AND  sb.`brand` = 'Cannondale'
      AND  dkprice > 0
      AND  dkprice IS NOT NULL
    ORDER BY  dkprice
    LIMIT  1 

没什么用。查询仍然需要很长时间才能执行。

解释输出:http://i.imgur.com/kfMPBrd.png

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-25 14:12:25

csb需要INDEX(shopbikeid, category_id)的两种顺序。如果categoriesshopbikes是一个多对多映射表,那么您是否遵循了http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table的所有建议?

按照这个顺序,sb需要INDEX(brand, dkprice)

我认为AND dkprice IS NOT NULLAND dkprice > 0是多余的。

票数 1
EN

Stack Overflow用户

发布于 2016-07-25 12:51:58

代码语言:javascript
复制
FROM shopbikes sb, categoriesshopbikes csb, shops s

我必须查看查询计划,但我认为这一行是问题所在。这类FROM子句可能会从列出的表(即600 k* 100 k*100行)创建笛卡尔积。

我猜适当的JOIN条款会有帮助

代码语言:javascript
复制
FROM shopbikes sb JOIN categoriesshopbikes csb ON (sb.id = csb.shopbikeid) JOIN shops s ON (sb.shopid = s.id)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38568159

复制
相关文章

相似问题

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