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

Puoi indicizzare le sottoquery?

Prima di tutto devi sapere che creare una tabella temporanea è assolutamente una soluzione fattibile. Ma nei casi non è applicabile altra scelta che non è vera qui!

Nel tuo caso, puoi facilmente aumentare la tua query come FrankPl sottolineato perché la tua sottoquery e la tua query principale sono entrambe raggruppate in base allo stesso campo. Quindi non hai bisogno di sottoquery. Copierò e incollerò la soluzione di FrankPl per completezza:

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

Tuttavia non significa che sia impossibile imbattersi in uno scenario in cui si desidera poter indicizzare una sottoquery. In questi casi hai due scelte, la prima è usare una tabella temporanea come hai indicato tu stesso, tenendo i risultati della sottoquery. Questa soluzione è vantaggiosa poiché è supportata da MySQL da molto tempo. Non è fattibile se è coinvolta un'enorme quantità di dati.

La seconda soluzione utilizza MySQL versione 5.6 o successiva . Nelle versioni recenti di MySQL vengono incorporati nuovi algoritmi in modo che un indice definito su una tabella utilizzata all'interno di una sottoquery possa essere utilizzato anche al di fuori della sottoquery.

[AGGIORNAMENTO]

Per la versione modificata della domanda consiglierei la seguente soluzione:

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;

Ma devi lavorare su HAVING parte. Potrebbe essere necessario cambiarlo in base al tuo problema reale.