Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Você pode indexar subconsultas?


Antes de tudo, você precisa saber que criar uma tabela temporária é uma solução absolutamente viável. Mas nos casos nenhuma outra escolha é aplicável, o que não é verdade aqui!

No seu caso, você pode facilmente aumentar sua consulta como FrankPl apontado porque sua subconsulta e consulta principal estão agrupadas pelo mesmo campo. Portanto, você não precisa de subconsultas. Vou copiar e colar a solução do FrankPl por uma questão de integridade:
SELECT o.property_B, SUM(o.score1), SUM(o.score2)
FROM o
GROUP BY property_B;

No entanto, isso não significa que seja impossível encontrar um cenário no qual você deseja indexar uma subconsulta. Nesses casos, você tem duas opções, a primeira é usar uma tabela temporária como você mesmo apontou, mantendo os resultados da subconsulta. Esta solução é vantajosa, pois é suportada pelo MySQL há muito tempo. Não é viável se houver uma grande quantidade de dados envolvidos.

A segunda solução é usar MySQL versão 5.6 ou superior . Em versões recentes do MySQL, novos algoritmos são incorporados para que um índice definido em uma tabela usada em uma subconsulta também possa ser usado fora da subconsulta.

[ATUALIZAÇÃO]

Para a versão editada da pergunta, eu recomendaria a seguinte solução:
SELECT o.property_B, SUM(IF(o.property_A = 'specific_A', o.score1, 0)), SUM(o.score2)
FROM o
GROUP BY property_B
HAVING SUM(IF(o.property_A = 'specific_A', o.score1, 0)) > 0;

Mas você precisa trabalhar no HAVING papel. Pode ser necessário alterá-lo de acordo com seu problema real.