2011-08-27 6 views
4

Possible en double:
Which is faster/best? SELECT * or SELECT column1, colum2, column3, etcMySQL sélectionnez la performance

J'ai une question sur les performances de MySQL. Avant le départ désolé pour mon mauvais anglais.

C'est la question: qu'est-ce que les différences de performance entre les astérisques et les noms de champs séparés par des virgules. Par exemple: a une table nommée "table_exemple" et 5 champs "f1, f2, f3, f4, f5" nommés.

select * from `example_table`; 

ou

select f1, f2, f3, f4, f5 from `example_table`; 

Merci pour les réponses.

+1

Je sais que c'est une dupe mais semble SO ne vous permet pas de rechercher '*' –

+0

Mes collègues, beaucoup mieux que moi dans la gestion de base de données, m'a toujours dit de ne pas utiliser 'SELECT *' car il faut beaucoup plus de temps que d'expliciter les champs dont vous avez besoin ... – Marco

Répondre

4

Si vous sélectionnez tous les champs, il n'y aura pas de différence de performance mesurable. Cela améliore la lisibilité du code, car vous savez exactement quels champs retournera la requête.

Si vous ne sélectionnez pas tous les champs, le deuxième formulaire aura une performance légèrement meilleure car MySQL enverra moins de données sur le réseau.

Cela peut également entraîner moins de lectures de disque si la table contient des colonnes TEXT ou BLOB et vous ne demandez pas ces colonnes. Ces types ne sont pas stockés directement dans les lignes, ce qui évite des lectures de disque supplémentaires.

Il n'y aura pas de différence de performance mesurable si vous sélectionnez tous les champs, cependant.

+0

L'OP parle du cas où le choix est entre 'SELECT *' et en sélectionnant explicitement toutes les colonnes. –

3

Il n'y aura pas de différence de performance dans l'exécution de cette requête; les deux requêtes sont équivalentes. Les deux sélectionnent toutes les colonnes de la table.

Il faudra probablement quelques nanosecondes supplémentaires pour analyser la deuxième requête simplement parce qu'il y a plus de caractères à analyser, mais cela ne causera pas de différence significative (ou même mesurable). Cependant, considérez ce qui se passera si une colonne supplémentaire est ajoutée à la table plus tard. Si cette colonne n'est pas nécessaire dans la requête d'origine, elle sera toujours projetée dans la requête et transférée vers l'application appelante. Cela peut en effet créer un ralentissement mesurable dans l'application. Par conséquent, il est toujours recommandé de sélectionner uniquement les colonnes dont vous avez besoin. (Si vous écrivez du code pour afficher des tables de base de données entières, alors * sera bien sûr approprié car la tâche à accomplir est "récupère toutes les colonnes de la table.")

+0

Je pense que @ arnaud576875 a raison si une table contient de nombreux champs et que l'utilisateur n'en a besoin que ... – Marco

+1

Il a raison dans ce scénario, mais ce n'est pas le scénario demandé par l'OP. – cdhowie

+0

Oh, vous avez raison, je n'ai pas remarqué que la table example_table a exactement cinq champs. OK, donc tu as raison !!! :) – Marco