sql >> Base de Datos >  >> RDS >> Mysql

¿Se pueden indexar las subconsultas?

En primer lugar, debe saber que crear una tabla temporal es una solución absolutamente factible. ¡Pero en los casos en que no se aplica otra opción, lo cual no es cierto aquí!

En su caso, puede promocionar fácilmente su consulta como FrankPl señaló porque su subconsulta y su consulta principal se agrupan por el mismo campo. Por lo tanto, no necesita ninguna subconsulta. Voy a copiar y pegar la solución de FrankPl en aras de la exhaustividad:

SELECT o.property_B, SUM(o.score1), SUM(o.score2)
FROM o
GROUP BY property_B;

Sin embargo, eso no significa que sea imposible encontrarse con un escenario en el que desee poder indexar una subconsulta. En cuyo caso, tiene dos opciones, la primera es usar una tabla temporal como usted mismo señaló, que contiene los resultados de la subconsulta. Esta solución es ventajosa ya que es compatible con MySQL durante mucho tiempo. Simplemente no es factible si hay una gran cantidad de datos involucrados.

La segunda solución es usar MySQL versión 5.6 o superior . En versiones recientes de MySQL, se incorporan nuevos algoritmos para que un índice definido en una tabla utilizada dentro de una subconsulta también se pueda usar fuera de la subconsulta.

[ACTUALIZAR]

Para la versión editada de la pregunta, recomendaría la siguiente solución:

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;

Pero necesitas trabajar en HAVING parte. Es posible que deba cambiarlo de acuerdo con su problema real.