Nel mio caso, unire la tabella all'interno della sottoquery o all'esterno della subquery dà pochissime differenze con COUNT
CASO 1: a circa 6202 righe.
In questo caso, table_c
viene aggiunto all'interno del sottoquery, ma viene aggiunto solo (Nessuna altra azione per la tabella, non viene selezionato alcun dato o il filtro dell'intera query con quella tabella).
CASO 2: a circa 6235 righe.
In questo caso la tabella viene unita al di fuori della sottoquery, ma la chiave di join ( groupCol
) è la stessa.
Ecco la mia query MySQL autoesplicativa:
SELECT
COUNT(*)
FROM (
SELECT
a.*
, b.some
# no c columns
# main table
FROM table_a AS a
# no mention this
LEFT JOIN table_b AS b
ON a.col = b.bcol
#### CASE 1 ###
# this is left joined, this is matter
# this is only joined, does nothing more
LEFT JOIN table_c AS c
ON c.col = a.groupCol
#### CASE 1 ###
WHERE
*** SOME statements ***
# c table not participating in WHERE, or GROUP-ing clause
GROUP BY a.groupCol
ORDER BY a.dateCol
) AS subSelect
#### CASE 2 : table_c is joined outside of subquery ###
LEFT JOIN table_c AS c
ON c.col = subSelect.groupCol
#### CASE 2 ###
WHERE
*** SOME statements ***
# table_c still not participating of course
So anche come funziona MySQL LEFT JOIN
: se i dati non vengono trovati nella seconda tabella, i campi corrispondenti di riga da quella tabella sono impostati su null.
Che cosa succede realmente qui non riesco a capire.
Anche il caso 1 è più veloce del caso 2.
Perché? Sicuramente, l'unione nel caso 1, contiene almeno il doppio di righe. Nel caso 2 viene prima filtrato e poi unito.
Ho pensato che dovrebbe essere più veloce ...