ho tabella come questa2 diversi piccoli interrogazione vs 1 query con sottoquery
name | personal_number
-----------------------------------------
Jon | 222
Alex | 555
Jon | 222
Jimmy | 999
ho bisogno di ottenere ogni nome, che personal_number repeates a tavola più di 1, che è risultato deve essere:
Jon
Jon
Così, Variante 1):
SELECT name FROM mytable WHERE personal_number IN (
SELECT personal_number FROM mytable GROUP BY personal_number
HAVING COUNT(*) > 1
)
Variante 2):
SELECT personal_number FROM mytable GROUP BY personal_number
HAVING COUNT(*) > 1
)
Quindi, utilizzando php, personal_numbers recuperati join as string (soemthing come questo '222', '222'
) ed eseguire altra query
SELECT name FROM mytable WHERE personal_number IN(here joined string)
Variante 2 opere circa 10 volte più veloce, di variante 1, questo è una sorpresa per me, stavo pensando che una query sarà più veloce, ma ...
(Nella tabella è 500 000 righe, colonne personal_number
non indicizzata)
Allora, che cosa vuoi dire su casi come questo? perché la variante 2 è molto più veloce della variante 1?
+1 per la buona domanda e per non chiedere prima di eseguire alcuni test di benchmark. – enenen
una SPIEGAZIONE delle due query dovrebbe mostrarlo –
Se nome e numero_dipendente dipendono l'uno dall'altro, si dovrebbe andare e portare la tabella al secondo modulo normale – Argeman