2010-02-09 1 views
1

Possible en double:
Which is faster/best? SELECT * or SELECT column1, colum2, column3, etc.SELECT Performance Statement à l'aide * par rapport à une liste de noms de champs

Dans un code que je lis, toutes les instructions SELECT utilisent une liste de noms de champs où tous les champs de la table sont sélectionnés. Par exemple, avec une table appelée livre et champs Auteur, PublishDate, Pages et le prix, l'instruction select ressemble à ceci:

SELECT Author, PublishDate, Pages, Price FROM Book; 

Toutes les instructions select dans l'application sont comme ce qui me fait me demande s'il y a une augmentation dans la performance par rapport à le faire:

SELECT * FROM Book; 

Je feuilletais un livre MySql mais n'a pas vu quoi que ce soit lié à cela. Compte tenu de la surcharge de maintenance de la modification de l'instruction SELECT chaque fois qu'un champ est ajouté, je me demandais de changer les choses à la syntaxe plus courte. Cela va-t-il introduire des problèmes de performance? Cela pourrait-il être lié à la sécurité?

+0

Ceci est probablement un double sur le SO (recherche ...) En bref, vous devriez utiliser les listes explicites la plupart du temps. – mjv

+1

En effet dupliquer. Par exemple http://stackoverflow.com/questions/65512/which-is-faster-best-select-or-select-column1-colum2-column3-etc – mjv

+1

Et BTW, il y a généralement un [petit mais efficace] _decrease_ de performance lors de l'utilisation du 'SELECT *' – mjv

Répondre

1

En règle générale, en programmation, il est presque toujours préférable d'être explicite. Select * ne vous fait pas vraiment économiser en termes de maintenance étant donné que le code qui consomme cette requête devra quand même être mis à jour dans la plupart des cas.

Si vous écrivez du code qui fonctionne simplement aveuglément sur les champs qui se trouvent dans une table spécifique, vous demandez des problèmes. Par exemple, le DBA qui ajoute une sorte de colonne de maintenance à une table comme un horodatage ne va pas penser qu'il apparaîtra soudainement dans votre application. Le meilleur moyen de pérenniser votre application est d'être explicite. De plus, n'oubliez pas le coût de la bande passante dans une architecture client-serveur en faisant glisser des colonnes de données que vous n'allez pas utiliser.

J'ai fait un traitement plus approfondi sur les conséquences sur les performances de l'utilisation select * dans ce court article, j'ai écrit un certain temps: "Don't Use Select *"

1

Il n'y a presque aucun impact sur les performances, mais un impact important sur la lisibilité et l'extensibilité du code. vous envoyez également plus de données au serveur sql car les noms prennent beaucoup plus d'espace par rapport à un seul caractère.

Questions connexes