sql >> Database teknologi >  >> RDS >> Mysql

Kan du indeksere underforespørgsler?

Først og fremmest skal du vide, at oprettelse af et midlertidigt bord absolut er en mulig løsning. Men i tilfælde er der ikke noget andet valg, som ikke er sandt her!

I dit tilfælde kan du nemt booste din forespørgsel som FrankPl påpeget, fordi din underforespørgsel og din hovedforespørgsel begge grupperes efter det samme felt. Så du behøver ingen underforespørgsler. Jeg har tænkt mig at kopiere og indsætte FrankPls løsning for fuldstændighedens skyld:

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

Alligevel betyder det ikke, at det er umuligt at støde på et scenarie, hvor du ønsker, at du kunne indeksere en underforespørgsel. I hvilke tilfælde du har to valg, er det først at bruge en midlertidig tabel, som du selv påpegede, med resultaterne af underforespørgslen. Denne løsning er fordelagtig, da den er understøttet af MySQL i lang tid. Det er bare ikke muligt, hvis der er en enorm mængde data involveret.

Den anden løsning bruger MySQL version 5.6 eller nyere . I nyere versioner af MySQL er nye algoritmer inkorporeret, så et indeks defineret på en tabel, der bruges i en underforespørgsel, også kan bruges uden for underforespørgslen.

[OPDATERING]

Til den redigerede version af spørgsmålet vil jeg anbefale følgende 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 skal arbejde på HAVING en del. Du skal muligvis ændre det i henhold til dit faktiske problem.



  1. Hvordan tæller jeg kolonner i en tabel

  2. Sådan automatiseres dataindsamling og ikke fryse på 10 %

  3. Migrering af din adgangsdatabase til SQL Server

  4. Gruppér efter et interval på X dage