sql >> Databasteknik >  >> RDS >> Mysql

Kan du indexera delfrågor?

Först och främst behöver du veta att att skapa ett tillfälligt bord är absolut en genomförbar lösning. Men i fall är inget annat val tillämpligt vilket inte är sant här!

I ditt fall kan du enkelt öka din fråga som FrankPl påpekade eftersom din underfråga och din huvudfråga båda grupperas efter samma fält. Så du behöver inga underfrågor. Jag ska kopiera och klistra in FrankPls lösning för fullständighetens skull:

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

Ändå betyder det inte att det är omöjligt att stöta på ett scenario där du önskar att du kunde indexera en underfråga. I vilka fall du har två val, är det första att använda en tillfällig tabell som du själv påpekade, som innehåller resultaten av underfrågan. Denna lösning är fördelaktig eftersom den stöds av MySQL under lång tid. Det är helt enkelt inte genomförbart om det finns en enorm mängd data inblandade.

Den andra lösningen använder MySQL version 5.6 eller högre . I de senaste versionerna av MySQL är nya algoritmer införlivade så att ett index som definieras i en tabell som används inom en underfråga också kan användas utanför underfrågan.

[UPPDATERA]

För den redigerade versionen av frågan skulle jag rekommendera följande lösning:

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;

Men du måste arbeta med HAVING del. Du kan behöva ändra det enligt ditt faktiska problem.



  1. PHP/MYSQL tillåter endast en röst per medlem?

  2. Ett nytt sätt att anpassa din PostgreSQL-övervakning med Prometheus

  3. Hur man konverterar strängfall i PostgreSQL

  4. ERD-notationer i datamodellering