Selection champs ou * ?

cs_Benz Messages postés 196 Date d'inscription jeudi 3 janvier 2002 Statut Membre Dernière intervention 7 juin 2007 - 19 mars 2004 à 15:42
cs_Benz Messages postés 196 Date d'inscription jeudi 3 janvier 2002 Statut Membre Dernière intervention 7 juin 2007 - 20 oct. 2005 à 14:40
Bonjour,

J'ai une question avec un commentaire qui peut paraître étrange...

Lorsque l'on constuit une requète de selection, on peut le faire de deux manières au moins :

REQ = "SELECT * FROM MaTable WHERE..."


ou aussi

REQ = "SELECT Nom, Prenom, Ville FROM MaTable WHERE..."


Ma question est simple :
Laquelle de ces deux façons d'écrire une requète est-elle la plus gourmande en ressources ?

J'ai entendu un jour que le fait de spécifier les champs souhaités était plus lourd que de tous les prendre par défaut.

Alors ?

Qui en sait plus ?

Que faire quand on n'a besoin de de 3 champs sur une table qui en contient 50 ?

C'est une simple question de culture personnelle et ca ne changera pas la face du monde mais... j'aimerais bien savoir.

Benz

5 réponses

dupython Messages postés 4 Date d'inscription dimanche 23 décembre 2001 Statut Membre Dernière intervention 19 mars 2004
19 mars 2004 à 16:54
Ce n'est que mon avis avec ma petite expérience :

Lorsque tu fais un * et que tu ne te sers pas des trois quarts des colonnes... faut pas.
Parce que ta requete est plus petite mais le résultat.... fo le transférer !
Moi je conseille plutot de spécifier les colonnes, je ne te parle pas en ressource mais en rapidité: moins de trucs a transférer, donc ca va plus vite.

L'exception est si tu utilise un count(*), la, il vaut mieux utiliser l'étoile, c'est plus facile de compter les lignes.
Si c'est dans un exists, je dois dire que je ne sais pas, je crois que c'est mieux l'étoile aussi car le résultat ne t'est pas transféré il reste en local a l'execution de la requete.

Voila !
0
vlaad Messages postés 79 Date d'inscription mardi 29 juin 2004 Statut Membre Dernière intervention 18 décembre 2006 3
20 oct. 2005 à 13:35
Un bon DBA te dirai qu'il faut utiliser les noms de champs et bannir l'utilisations de l'étoile.
L'étoile peut à la limite servir pour faire des tests avec un analyseur de requetes mais c'est tout.
De plus ton code SQL sera plus comprehensible sur des requetes importantes, en taille, cela permet d'éviter les doublons par exemple...


Les programmeurs sont rois....Ceux qui ne croient pas en nous sont des fous...
0
cs_Benz Messages postés 196 Date d'inscription jeudi 3 janvier 2002 Statut Membre Dernière intervention 7 juin 2007
20 oct. 2005 à 14:06
Merci de vos réponses.

Pour l'instant j'utilise systématiquement *, parce que c'est plus
simple à écrire (et aussi plus rapide que de spécifier 30 champs) et
que ça tiens moins de place...mais je vais peux être adapter mon code à
présent si les bon DBA banissent l'étoile :-)



Question performance, nous verrons bien ce que ça donne.


Benoit

<hr size="2" width="100%">Besoin d'argent ? Domicile-Job >> Travail à domicile
Envie de jouer ? Le Sanktuaire >> Ressources jeux de roles
0
vlaad Messages postés 79 Date d'inscription mardi 29 juin 2004 Statut Membre Dernière intervention 18 décembre 2006 3
20 oct. 2005 à 14:15
Rien ne t'y oblige mais tu verras qu'a force c'est mieux de prendre cette habitude...
Elle t'évitera pas mal de problèmes...


Les programmeurs sont rois....Ceux qui ne croient pas en nous sont des fous...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Benz Messages postés 196 Date d'inscription jeudi 3 janvier 2002 Statut Membre Dernière intervention 7 juin 2007
20 oct. 2005 à 14:40
C'est sûr, je ne suis pas obligé puisque les deux méthodes fonctionnent très bien.

Cela dit, en générale on recheche l'optimisation... donc optimisons :-)

Benoit

<hr size="2" width="100%">Besoin d'argent ? Domicile-Job >> Travail à domicile
Envie de jouer ? Le Sanktuaire >> Ressources jeux de roles
0
Rejoignez-nous