jointure interne, et() de la clause de la performance?
Je peux obtenir le même résultat pour ces requêtes, mais lequel est le plus rapide et la plus efficace?
où() ou inner join?
SELECT `stats`.`userid`,`stats`.`sumpoint`
FROM `stats`
INNER JOIN users
ON `stats`.`userid` = `users`.`userid`
WHERE `users`.`nick` = '$nick'
ORDER BY `statoylar`.`sumpoint` DESC limit 0,10
et
SELECT `stats`.`userid`,`stats`.`sumpoint`
FROM `stats`
WHERE userid
IN (
SELECT userid
FROM `users`
WHERE `users`.`nick` = '$nick'
)
ORDER BY `stats`.`sumpoint` DESC limit 0,10
en bref inner join éviter dans la clause que possible
MySQL a des problèmes avec
MySQL a des problèmes avec
in
et de sous-requêtes. Voir stackoverflow.com/questions/3417074/...OriginalL'auteur ocanal | 2011-03-11
Vous devez vous connecter pour publier un commentaire.
Dépend de votre moteur SQL. Plus récente de SQL systèmes raisonnable optimiseurs de requêtes seront plus susceptibles de réécrire les deux requêtes sur le même plan. Généralement, une sous-requête (votre deuxième question) est réécrite à l'aide d'une jointure (la première requête).
Dans de simples SQL moteurs qui n'ont pas grand optimiseurs de requêtes, la jointure doit être plus rapide, car ils peuvent exécuter des sous-requêtes dans une temporaire de la table en mémoire avant d'exécuter la requête externe.
Dans certains SQL moteurs qui ont peu de mémoire, cependant, la sous-requête peut être plus rapide car elle ne nécessite pas de se joindre -- qui produit plus de données.
Donc, en résumé, ça dépend.
OriginalL'auteur Stephen Chung
afin de vérifier la performance d'exécuter la Requête avec
EXPLAIN SELECT ....
Autant que je sache,
INNER JOIN
est plus rapide queIN
btw quel est votre type de table de moteur
MYISAM
ouINNODB
également un facteur de dépendance est
index
+1 pour ce qui suggère "d'expliquer sélectionnez', de qui je suis surpris c'est la seule réponse à suggérer que.
OriginalL'auteur diEcho
il y a aussi une autre option, il EXISTE. Je suis un tsql mec, donc....
Je pense qu'il EXISTE est disponible dans la plupart des moteurs. Il est généralement assez rapide.
DANS sql server au moins (2005+) il n'y a pas de différence de performances entre DANS et EXISTE pour les cas où la colonne en question n'est pas NULLABLE.
probablement hors de propos mais bon.....
OriginalL'auteur Transact Charlie