Ottimizzare le clausole GROUP BY e DISTINCT nelle subquery
Una clausola DISTINCT e una GROUP BY senza HAVING non hanno significato nelle subquery IN/ALL/ANY/SOME/EXISTS. Il motivo è che IN/ALL/ANY/SOME/EXISTS verifica solo se una riga nella query esterna soddisfa certe condizioni, rispetto a una riga o tutte le righe nel risultato della subquery. Perciò non importa se la subquery restituisce righe duplicate oppure no - se la condizione è vera per una riga della subquery, allora sarà vera anche per i suoi duplicati. Si noti che GROUP BY senza HAVING equivale a DISTINCT.
MariaDB 5.3 e le versioni successive rimuovono automaticamente le DISTINCT e le GROUP BY senza HAVING, se queste appaiono in una subquery IN/ALL/ANY/SOME/EXISTS. Per esempio:
select * from t1 where t1.a > ALL(select distinct b from t2 where t2.c > 100)
Viene trasformata in:
select * from t1 where t1.a > ALL(select b from t2 where t2.c > 100)
Rimuovendo queste clausole non necessarie, l'ottimizzatore può determinare più efficientemente i piani di esecuzione delle query perché non deve preoccuparsi delle operazioni che avvengono dopo l'elaborazione dei risultati della subquery, dovute a DISTINCT / GROUP BY.