J'ai un tableau comme celui-ci
name | personal_number
-----------------------------------------
Jon | 222
Alex | 555
Jon | 222
Jimmy | 999
J'ai besoin de récupérer tous les noms dont le numéro personnel se répète plus de 1 fois dans la table, c'est à dire que le résultat doit être :
Jon
Jon
Donc, 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
)
Ensuite, à l'aide de php, j'ai récupéré la jointure des numéros personnels sous forme de chaîne de caractères (quelque chose comme ceci '222', '222'
) et exécuter d'autres requêtes
SELECT name FROM mytable WHERE personal_number IN( here joined string )
La variante 2 fonctionne environ 10 fois plus vite que la variante 1, c'est une surprise pour moi, je pensais qu'une seule requête serait plus rapide, mais...
(Dans un tableau de 500 000 lignes, la colonne personal_number
non indexé)
Pourquoi la variante 2 est-elle beaucoup plus rapide que la variante 1 ?