MySQL:优化 GROUP BY 多个键

标签 mysql optimization group-by query-optimization

我在 MySql 数据库中有一个 PAYMENTS 表:

CREATE TABLE `PAYMENTS` (
    `ID` BIGINT(20) NOT NULL AUTO_INCREMENT,
    `USER_ID` BIGINT(20) NOT NULL,
    `CATEGORY_ID` BIGINT(20) NOT NULL,
    `AMOUNT` DOUBLE NULL DEFAULT NULL,
    PRIMARY KEY (`ID`),
    INDEX `PAYMENT_INDEX1` (`USER_ID`),
    INDEX `PAYMENT_INDEX2` (`CATEGORY_ID`),
    INDEX `PAYMENT_INDEX3` (`CATEGORY_ID`, `USER_ID`)
) ENGINE=InnoDB;

我想获取 ech 类别中每个用户的摘要金额。这是脚本:

select sum(AMOUNT), USER_ID, CATEGORY_ID
from PAYMENTS
group by USER_ID, CATEGORY_ID;

MySql 的 EXPLAIN 命令显示额外:“使用临时;使用文件排序”

如何摆脱使用临时和文件排序?

最佳答案

您在 (CATEGORY_ID, USER_ID) 上有索引,但您按 USER_ID, CATEGORY_ID 进行分组。

顺序很重要! 创建一个涵盖您实际使用的 GROUP BY 子句的索引 - 字段的顺序相同。

关于MySQL:优化 GROUP BY 多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915574/

相关文章:

c - 测试双数是否为整数的最快方法是什么(在现代英特尔 X86 处理器中)

MySQL,从同一个表中选择 2 个以上匹配项

javascript - 带计数的组数组

mysql与vb net远程连接

mysql - 从最后一行开始搜索 mysql 表

php - 同一字段上具有两个条件的 Sql 内连接

c++ - 是什么减慢了键上对的排序?

python - Pandas :groupby 和可变权重

C#如何从sql server日期列中获取日期并显示在文本框中

php - 更新脚本随机停止