sql >> Database >  >> RDS >> Mysql

Kun je subquery's indexeren?

Allereerst moet u weten dat het maken van een tijdelijke tabel absoluut een haalbare oplossing is. Maar in gevallen is geen andere keuze van toepassing wat hier niet waar is!

In jouw geval kun je je zoekopdracht eenvoudig boosten als FrankPl opgemerkt omdat uw subquery en hoofdquery beide op hetzelfde veld zijn gegroepeerd. Je hebt dus geen subquery's nodig. Ik ga voor de volledigheid de oplossing van FrankPl kopiëren en plakken:

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

Toch betekent dit niet dat het onmogelijk is om een ​​scenario tegen te komen waarin je zou willen dat je een subquery zou kunnen indexeren. In welke gevallen je twee keuzes hebt, is de eerste het gebruik van een tijdelijke tabel zoals je zelf hebt aangegeven, met de resultaten van de subquery. Deze oplossing is voordelig omdat deze lange tijd door MySQL wordt ondersteund. Het is gewoon niet haalbaar als er een enorme hoeveelheid gegevens bij betrokken is.

De tweede oplossing is het gebruik van MySQL versie 5.6 of hoger . In recente versies van MySQL zijn nieuwe algoritmen opgenomen, zodat een index die is gedefinieerd op een tabel die binnen een subquery wordt gebruikt, ook buiten de subquery kan worden gebruikt.

[UPDATE]

Voor de bewerkte versie van de vraag zou ik de volgende oplossing aanbevelen:

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;

Maar je moet werken aan de HAVING een deel. Mogelijk moet u dit aanpassen aan uw werkelijke probleem.



  1. De Open edX MySQL-database implementeren voor hoge beschikbaarheid

  2. Selecteer ALLE velden die alleen HOOFDLETTERS bevatten

  3. Hoe stel je een variabele in op het resultaat van een opgeslagen procedure in een Trigger MYSQL?

  4. Facebook kan geen metagegevens schrapen nadat ik Wordpress naar een nieuwe server heb verplaatst