mysql - 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 分钟以上。所以我使用LIMIT
但OFFSET
没有改进。
请帮我。谢谢你。
更新:
解决方案
对于此查询:
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)
.
推荐阅读
- javascript - JQuery下拉选择onchange附近的类
- html - 如果我点击图像图标,图标应该是可点击的,并且应该打开一个弹出窗口[对话框]以上传新图像
- javascript - 如何清除整个反应材料ui表内容
- sql - 作为存储过程的一部分,多行被插入到表中(这是不需要的)
- kubernetes - 是否可以 --from-file ConfigMap 使用 kubernetes_config_map 资源?
- python - 我想爬取存储在磁盘上的 SSIS ETL 包
- angular - 使用 angular7 如何在使用服务器 API 调用组件后获取数据库更新值
- c++ - 消除标点符号和空格
- javascript - Javascript 和 JQuery 同步执行
- node.js - Nodejs - 使请求等待对象的延迟初始化