Bonjour,
je bosse depuis longtemps avec mysql 3.23 et je ne pouvais pas appliquer ce que j'avais appris à l'école, je ne pouvais pas faire de sous-requêtes.
Mes serveur utilisent de plus en plus mysql5, je fais quelques tests mais les résultats sont ... surprenants.
Sur une table de 6 000 éléments, si je fais
J'obtiens "8 rows in set (0.01 sec)"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Select Id , max( DateTime ) From V1s group by Id;
Si je me sers d'un résultat pour faire une requête, genre ce que je fais en php
J'obtiens "8 rows in set (0.02 sec)"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Select Id , DateTime , V from V1s where ( Id , DateTime ) IN ( (3877 , '2010-07-07 15:57:12') , (3878 , '2010-07-07 15:57:12') , ( 3879 , '2010-07-07 15:57:11') , (3881 , '2010-07-07 15:57:12'), (3882 , '2010-07-07 15:57:12'), (3883 , '2010-07-07 15:57:12'), ( 3884 , '2010-07-07 15:57:12'), ( 3890 , '2010-07-07 15:40:47') ) ;
Si maintenant je m'amuse à faire plutôt
Et là c'est le drame, ça me donne les même résultats mais en 2 minutes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Select Id , DateTime , V from V1s where ( Id , DateTime ) IN ( Select Id , max( DateTime ) From V1s group by Id ) ;
Je pensais que les 2 façons de faire était équivalentes en interne, la deuxième permettant d'économiser une requête et plus propre à écrire.
Où est-ce que je me trompe ?
Partager