select * from : lourd ou pas ?

Eléphanteau du PHP | 17 Messages

26 janv. 2007, 18:58

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.

ViPHP
ViPHP | 2144 Messages

26 janv. 2007, 19:32

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.

ViPHP
ViPHP | 1961 Messages

26 janv. 2007, 19:45

Bonsoir,

Et ça permet l'utilisation des indexes, ce qui accélère considérablement.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

26 janv. 2007, 20:18

Je crois que ovide parlait de

Code : Tout sélectionner

SELECT * FROM table
opposé à

Code : Tout sélectionner

SELECT col1, col2, col3 FROM table
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.

Invité
Invité n'ayant pas de compte PHPfrance

26 janv. 2007, 22:46

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 ?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

26 janv. 2007, 22:49

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)

Eléphanteau du PHP | 17 Messages

26 janv. 2007, 22:50

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]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 janv. 2007, 23:59

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 Image en haut à gauche de ce sujet.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 217 Messages

27 janv. 2007, 10:50

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 :)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 janv. 2007, 11:03

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...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 janv. 2007, 11:04

En revanche, jamais de SELECT * :non:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 janv. 2007, 15:11

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é ? :roll:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 janv. 2007, 15:51

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.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 janv. 2007, 18:47

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.

Code : Tout sélectionner

SELECT t2.col2 FROM t1 JOIN t2 USING (col1)
et

Code : Tout sélectionner

SELECT t2.col2 FROM t1, t2 WHERE t2.col1 = t1.col1
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