MySQL:多键优化组

MySQL:多键优化组,mysql,optimization,group-by,query-optimization,Mysql,Optimization,Group By,Query Optimization,我在MySql数据库中有一个付款表: 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_INDE

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

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\u ID,USER\u ID)
,但您是按
USER\u ID,CATEGORY\u ID进行分组的


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

谢谢!我已经改变了索引中字段的顺序,现在它不需要额外的东西就可以工作了@VoteyDisciple-假设没有“PAYMENT_INDEX3”,我们可以在group by子句中使用单个索引吗?