select * from : lourd ou pas ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : select * from : lourd ou pas ?

par Hubert Roksor » 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

par albat » 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.

par ouckileou » 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:

par albat » 27 janv. 2007, 11:04

En revanche, jamais de SELECT * :non:

par albat » 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...

par mojorisin » 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 :)

par Truc » 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.

par ovide » 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]

par Hubert Roksor » 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)

par Invité » 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 ?

par Hubert Roksor » 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.

par Ajoloca » 26 janv. 2007, 19:45

Bonsoir,

Et ça permet l'utilisation des indexes, ce qui accélère considérablement.

par iclo » 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.

select * from : lourd ou pas ?

par ovide » 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.