查询无休止地运行并且内存不足-MySQL 8.0.16 AWS RDS

查询无休止地运行并且内存不足-MySQL 8.0.16 AWS RDS,mysql,sql,amazon-web-services,amazon-rds,Mysql,Sql,Amazon Web Services,Amazon Rds,在MySQL 8.0.16中,有人能帮我解决这个问题吗?这个查询在AWS RDS上无休止地运行,内存不足,我想问题在于UNION all和GROUP BY语句 SELECT SUM(`CONV`.`ELEGIVEL`) AS `ELEGIVEL`, SUM(`CONV`.`ADESAO`) AS `ADESAO`, `CONV`.`ano` AS `ano`, `CONV`.`mes` AS `mes`, `CONV`.`

在MySQL 8.0.16中,有人能帮我解决这个问题吗?这个查询在AWS RDS上无休止地运行,内存不足,我想问题在于UNION all和GROUP BY语句


SELECT 
       SUM(`CONV`.`ELEGIVEL`) AS `ELEGIVEL`,
       SUM(`CONV`.`ADESAO`) AS `ADESAO`,
       `CONV`.`ano` AS `ano`,
       `CONV`.`mes` AS `mes`,
       `CONV`.`TIPO` AS `TIPO`
   FROM
       (


SELECT 
           SUM(`v`.`QuantidadeItem`) AS `ELEGIVEL`,
               NULL AS `ADESAO`,
               `v`.`ano` AS `ano`,
               `v`.`mes` AS `mes`,
               'BENCH' AS `TIPO`
       FROM
           `V_VENDAS_ELEGIVEIS` `v`
       WHERE
           ((`v`.`nome_emp` LIKE '%ESB%')
               AND (`v`.`data_lancamento` BETWEEN DATE_FORMAT((NOW() - INTERVAL 12 MONTH), '%Y-%m-01') AND LAST_DAY((CURDATE() - INTERVAL 1 MONTH))))
       GROUP BY `v`.`ano` , `v`.`mes` UNION ALL SELECT 
           NULL AS `ELEGIVEL`,
               COUNT(0) AS `ADESAO`,
               `V_SEGUROS_ADESAO`.`Ano` AS `ano`,
               `V_SEGUROS_ADESAO`.`Mes` AS `mes`,
               'BENCH' AS `TIPO`
       FROM
           `V_SEGUROS_ADESAO`
       WHERE
           ((`V_SEGUROS_ADESAO`.`nome_emp` LIKE '%ESB%')
               AND (`V_SEGUROS_ADESAO`.`dataemissao` BETWEEN DATE_FORMAT((NOW() - INTERVAL 12 MONTH), '%Y-%m-01') AND LAST_DAY((CURDATE() - INTERVAL 1 MONTH))))
       GROUP BY `V_SEGUROS_ADESAO`.`Ano` , `V_SEGUROS_ADESAO`.`Mes` UNION ALL SELECT 
           SUM(`v`.`QuantidadeItem`) AS `ELEGIVEL`,
               NULL AS `ADESAO`,
               `v`.`ano` AS `ano`,
               `v`.`mes` AS `mes`,
               'BRAND' AS `TIPO`

       FROM
           `V_VENDAS_ELEGIVEIS` `v`
       WHERE
           (`v`.`data_lancamento` BETWEEN DATE_FORMAT((NOW() - INTERVAL 12 MONTH), '%Y-%m-01') AND LAST_DAY((CURDATE() - INTERVAL 1 MONTH)))
       GROUP BY `v`.`ano` , `v`.`mes` UNION ALL SELECT 
           NULL AS `ELEGIVEL`,
               COUNT(0) AS `ADESAO`,
               `V_SEGUROS_ADESAO`.`Ano` AS `ano`,
               `V_SEGUROS_ADESAO`.`Mes` AS `mes`,
               'BRAND' AS `TIPO`
       FROM
           `V_SEGUROS_ADESAO`
       WHERE
           (`V_SEGUROS_ADESAO`.`dataemissao` BETWEEN DATE_FORMAT((NOW() - INTERVAL 12 MONTH), '%Y-%m-01') AND LAST_DAY((CURDATE() - INTERVAL 1 MONTH)))
       GROUP BY `V_SEGUROS_ADESAO`.`Ano` , `V_SEGUROS_ADESAO`.`Mes`

) `CONV`

GROUP BY `CONV`.`ano` , `CONV`.`mes`, `CONV`.`TIPO`

如果像下面的代码一样,每次将上面的查询拆分为一个查询,结果会非常快

SELECT 
       SUM(`BENCH`.`ELEGIVEL`) AS `ELEGIVEL`,
       SUM(`BENCH`.`ADESAO`) AS `ADESAO`,
       `BENCH`.`ano` AS `ano`,
       `BENCH`.`mes` AS `mes`,
       'BENCHMARK' AS `TIPO`
   FROM
       (SELECT 
           SUM(`v`.`QuantidadeItem`) AS `ELEGIVEL`,
               NULL AS `ADESAO`,
               `v`.`ano` AS `ano`,
               `v`.`mes` AS `mes`
       FROM
           `V_VENDAS_ELEGIVEIS` `v`
       WHERE
           ((`v`.`nome_emp` LIKE '%ESB%')
               AND (`v`.`data_lancamento` BETWEEN DATE_FORMAT((NOW() - INTERVAL 12 MONTH), '%Y-%m-01') AND LAST_DAY((CURDATE() - INTERVAL 1 MONTH))))
       GROUP BY `v`.`ano` , `v`.`mes` UNION ALL SELECT 
           NULL AS `ELEGIVEL`,
               COUNT(0) AS `ADESAO`,
               `V_SEGUROS_ADESAO`.`Ano` AS `ano`,
               `V_SEGUROS_ADESAO`.`Mes` AS `mes`
       FROM
           `V_SEGUROS_ADESAO`
       WHERE
           ((`V_SEGUROS_ADESAO`.`nome_emp` LIKE '%ESB%')
               AND (`V_SEGUROS_ADESAO`.`dataemissao` BETWEEN DATE_FORMAT((NOW() - INTERVAL 12 MONTH), '%Y-%m-01') AND LAST_DAY((CURDATE() - INTERVAL 1 MONTH))))
       GROUP BY `V_SEGUROS_ADESAO`.`Ano` , `V_SEGUROS_ADESAO`.`Mes`) `BENCH`
   GROUP BY `BENCH`.`ano` , `BENCH`.`mes`

该服务器基于AWS RDS。我没有更改任何参数组,它是默认的.mysql8.0参数


它是一个db.t3.medium实例,有4Gb的RAM

嵌套的SELECT语句在每个级别上都有分组,这太复杂,效率太低。我强烈建议您将逻辑重新设计为一个存储过程,在这个过程中,您可以使用临时表和更简单的命令组合,一步一步地收集数据

请将标题重新写为一个句子,而不是全部大写。不用喊了。