MySQL:优化GROUP BY多个键

时间:2010-10-12 14:07:57

标签: 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命令显示Extra:“Using temporary; Using filesort”

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

1 个答案:

答案 0 :(得分:6)

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

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