Page 1 sur 1
select * from : lourd ou pas ?
Posté : 26 janv. 2007, 18:58
par ovide
Bonjour,
Vaut-il mieux, pour la rapidité, faire un select * ou bien préciser les champs uniquement nécessaires pour la suite ? Ou bien il n'y a pas de différence ?
Merci.
Posté : 26 janv. 2007, 19:32
par iclo
Salut
Il vaut mieux spécifier les champs à récupérer, ça évite de rappatrier des informations inutiles, et donc limite les ressources nécessaires.
Posté : 26 janv. 2007, 19:45
par Ajoloca
Bonsoir,
Et ça permet l'utilisation des indexes, ce qui accélère considérablement.
Posté : 26 janv. 2007, 20:18
par Hubert Roksor
Je crois que
ovide parlait de
opposé à
J'avais fait quelques tests informels, et il y a un gain marginal (en terme de performances) à utiliser certaines syntaxes sous certaines condition, mais le gain est très marginal donc ce que je recommande vraiment c'est de spécifier tous les champs dont on a besoin (donc tous, si besoin est) et de les lister dans l'ordre où ils apparaissent dans la table.
Posté : 26 janv. 2007, 22:46
par Invité
Oui, c'est ça (col 1, col2 etc., à la place de *)
Donc ça évite de rapatrier tout le tralala. Ok, merci !
Autre question aussi svp. Entre where et join ? Lequel et le meilleur et pourquoi svp ?
Posté : 26 janv. 2007, 22:49
par Hubert Roksor
Ce sont deux clauses totalement différentes, il faudrait que tu donnes l'exemple des deux requêtes à comparer. (donnant le même résultat, évidemment)
Posté : 26 janv. 2007, 22:50
par ovide
C'est noté, merci.
J'avais fait quelques tests informels, et il y a un gain marginal (en terme de performances) à utiliser certaines syntaxes sous certaines condition, mais le gain est très marginal donc ce que je recommande vraiment c'est de spécifier tous les champs dont on a besoin (donc tous, si besoin est) et de les lister dans l'ordre où ils apparaissent dans la table.
[/quote][/code]
Posté : 26 janv. 2007, 23:59
par Truc
Modération :
ovide, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton
en haut à gauche de ce sujet.
Posté : 27 janv. 2007, 10:50
par mojorisin
Salut,
personnelement je n'aime pas les where champ1=champ2 :
La clause where est la pour filtrer et éliminer des données lors de la selection, je trouve contradictoire le fait de demander l'élimination de données d'une part et de demander d'en rajouter par une jointure.
De plus je trouve les requetes plus facile à lire lorsque l'on a des jointures faites avec JOIN.
Ceci dit c'est un avis personnel

Posté : 27 janv. 2007, 11:03
par albat
C'est un peu une histoire de goûts et de couleurs.
Ainsi, je suis d'accord avec mojorisin
et je préfère appliquer une discipline de clarté :
- jointures de tables dans la clause FROM avec des JOIN
- comparaison avec des valeurs dans les clauses WHERE
Cependant, il faut bien reconnaître que dans une requête
faisant appel à 4 tables ou plus, les jointures faites dans les clauses WHERE
permettent tout de même une meilleure lisibilité que des JOIN dans le FROM.
Après, c'est une affaire personnelle,
les performances n'étant - à priori - guère affectées par ce choix...
Posté : 27 janv. 2007, 11:04
par albat
En revanche, jamais de
SELECT * 
Posté : 27 janv. 2007, 15:11
par ouckileou
Cependant, il faut bien reconnaître que dans une requête
faisant appel à 4 tables ou plus, les jointures faites dans les clauses WHERE
permettent tout de même une meilleure lisibilité que des JOIN dans le FROM.
Heu, tu veux dire que c'est le contraire non ?
Avec 4 jointures et 3 critères de tri, tu trouves ça plus clair si tout est mélangé ?

Posté : 27 janv. 2007, 15:51
par albat
Non, non, je m'y retrouve mieux avec 15 lignes de WHERE et de AND
qu'avec un FROM qui n'en finit pas avec ses 36 JOIN... ON.
D'autant plus que je prends soin de placer
- en tête les clauses WHERE de jointure,
- en queue, les clauses WHERE de comparaison.
Mais comme je l'ai bien indiqué, c'est une affaire de goûts personnels.
Posté : 27 janv. 2007, 18:47
par Hubert Roksor
les performances n'étant - à priori - guère affectées par ce choix...
Elles ne le sont même pas du tout parce que MySQL réécrit la requête de la même façon.
et
deviennent
Code : Tout sélectionner
select "test"."t2"."col2" AS "col2" from "test"."t1" join "test"."t2" where ("test"."t2"."col1" = "test"."t1"."col1")
(exécutées sur la base de données "test")
voir
EXPLAIN EXTENDED