首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql表连接花费了太多时间,而简单的选择结果却很快。

Mysql表连接花费了太多时间,而简单的选择结果却很快。
EN

Stack Overflow用户
提问于 2018-09-02 05:26:53
回答 1查看 276关注 0票数 2

我有一张InnoDB桌子daily_sales_msr

当我在没有加入的情况下从该表运行一个查询时,该查询将快速返回输出。

但是,如果我把那张桌子连到一张小桌子上,那就太费时了。这个问题的解决办法是什么?

例如:

代码语言:javascript
复制
SELECT
sku.ssku,
ROUND(SUM(daily_sales_msr.sale), 3) AS sale,
MONTHNAME(daily_sales_msr.date) AS `month`
FROM
daily_sales_msr
INNER JOIN sku ON sku.id = daily_sales_msr.skid
WHERE
daily_sales_msr.date BETWEEN '2018-08-01'
AND '2018-08-08'
GROUP BY
daily_sales_msr.skid

这个查询需要超过1000 s。

没有任何连接,它只需要0.15秒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-02 06:31:24

对于性能,请确保有适当的索引。

在您的例子中,您可以在

代码语言:javascript
复制
table daily_sales_msr for  columns  (skid,date) 

对于SQL,您使用的是group,但select中的某些列与聚合函数无关,这在mysql启动表5.7中的大多数db引擎e中没有用defualt指定。这些列的结果是不可预测的,因此您应该将这些列按

代码语言:javascript
复制
SELECT
  sku.ssku,
  ROUND(SUM(daily_sales_msr.sale), 3) AS sale,
  MONTHNAME(daily_sales_msr.date) AS `month`
FROM  daily_sales_msr
INNER JOIN sku ON sku.id = daily_sales_msr.skid
WHERE  daily_sales_msr.date BETWEEN '2018-08-01'  AND '2018-08-08'
GROUP BY  daily_sales_msr.skid, month 

也可以对这些列使用聚合函数。

代码语言:javascript
复制
SELECT
  sku.ssku,
  ROUND(SUM(daily_sales_msr.sale), 3) AS sale,
  MAX(MONTHNAME(daily_sales_msr.date)) AS `month`
FROM  daily_sales_msr
INNER JOIN sku ON sku.id = daily_sales_msr.skid
WHERE  daily_sales_msr.date BETWEEN '2018-08-01'  AND '2018-08-08'
GROUP BY  daily_sales_msr.skid
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52134230

复制
相关文章

相似问题

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