Nejprve musíte vědět, že vytvoření dočasné tabulky je naprosto proveditelné řešení. Ale v těchto případech nelze použít jinou volbu, což zde neplatí!
Ve vašem případě můžete svůj dotaz snadno posílit jako FrankPl upozornil, protože váš dílčí dotaz a hlavní dotaz jsou seskupeny podle stejného pole. Nepotřebujete tedy žádné poddotazy. Pro úplnost zkopíruji a vložím řešení FrankPl:
SELECT o.property_B, SUM(o.score1), SUM(o.score2)
FROM o
GROUP BY property_B;
To však neznamená, že je nemožné narazit na scénář, ve kterém si přejete indexovat dílčí dotaz. V kterých případech máte dvě možnosti, první je použití dočasné tabulky, jak jste sami uvedli, obsahující výsledky dílčího dotazu. Toto řešení je výhodné, protože je dlouhodobě podporováno MySQL. Je to prostě neproveditelné, pokud jde o obrovské množství dat.
Druhým řešením je použití MySQL verze 5.6 nebo vyšší . V posledních verzích MySQL jsou začleněny nové algoritmy, takže index definovaný v tabulce použité v rámci dílčího dotazu lze použít i mimo dílčí dotaz.
[AKTUALIZACE]
Pro upravenou verzi otázky bych doporučil následující řešení:
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;
Ale musíte pracovat na HAVING
část. Možná jej budete muset změnit podle skutečného problému.