首页 > 解决方案 > MYSQL 查询中数以万计的记录性能非常慢

问题描述

id    market_id      date          keyword                 sku            a             b         c  
1        1        2019-01-01    some text for this      QAB-XU-VV        3.1           2.4       3.5
2        2        2019-01-02    some text for text      ABC-XA-VV        2.1           4.1       1.2

这是表的一个实例A

`id` : `int primary key auto increment`
`market_id` : `int(4)`  `INDEX`
`date` : `date`   `INDEX`
`keyword`: `varchar(191)` `utf8_general_ci`
`sku`: `varchar(191)` INDEX `utf8_general_ci`
`a, b, c` : `float` 

我需要这样查询

SELECT
  sku,
  keyword,
  market_id,
  SUM(a),
  SUM(b),
  SUM(c),
FROM A
WHERE market_id = 2 AND date BETWEEN '2020-01-01' and '2020-02-02'
GROUP BY sku, keyword;

此查询预计大约有十万条记录。此查询需要 5 分钟以上。所以我使用LIMITOFFSET没有改进。

请帮我。谢谢你。

更新:

这显示了EXPLAIN结果。 在此处输入图像描述

标签: mysqlsqlperformancemysql-slow-query-log

解决方案


对于此查询:

SELECT sku, keyword, market_id,
       SUM(a), SUM(b), SUM(c)
FROM A
WHERE market_id = 2 AND
      date BETWEEN '2020-01-01' and '2020-02-02'
GROUP BY sku, keyword, market_id;

我会推荐一个关于A(market_id, date, sku, keyword, a, b, c).

这是一个覆盖索引,因此不需要读取原始数据页。您也可以使用A(market_id, date).


推荐阅读