sélectionnez * vs sélectionner la colonne

Si j'ai juste besoin de 2/3 des colonnes et j'ai une requête SELECT * au lieu de fournir ces colonnes dans la requête de sélection, est-il une dégradation des performances en ce qui concerne plus/moins d'e/S ou de mémoire?

La surcharge du réseau peut être présent si je ne sélectionnez * sans nécessité.

Mais dans une opération de sélection, le moteur de base de données toujours tirer atomique tuple à partir du disque, ou faut-il tirer uniquement les colonnes demandées dans l'opération de sélection?

Si il tire toujours un tuple puis-je/O surcharge est la même.

Dans le même temps, il y a peut être une consommation de mémoire pour décaper les colonnes de la n-uplet, si elle tire un n-uplet.

Si c'est le cas, sélectionnez someColumn aura plus de surcharge de mémoire que celle de select *

  • Est-il un SGBDR spécifique vous vous posez à propos de? Il est possible que la façon dont SELECT les requêtes sont exécutées/de traitement est différente de la base de données de la base de données.
  • En aparté, dans PostgreSQL, si vous dites CREATE VIEW foo_view AS SELECT * FROM foo;, puis ajouter des colonnes à la table foo plus tard, ces colonnes ne s'affichent automatiquement dans la foo_view comme prévu. En d'autres termes, la * dans ce contexte se développe seulement une fois (lors de la création de la vue de temps), pas pour le SÉLECTIONNER. En raison de complications découlant de l'ALTER TABLE, je dirais que (dans la pratique) * est Considéré comme Nocif.
  • pas seulement PostgresQL, c'est aussi le comportement de l'Oracle.
  • double possible de les Meilleurs à utiliser * lors de l'appel de beaucoup de champs dans mysql?
  • Poneys: je n'étais pas au courant de la poste similaire. Toutefois, Ces méthodes ne sont pas vraiment similer. @Lèse-majesté: je parle Générique SGBDR. pas à propos de tout fournisseur spécifique @Joey Adams: Hmm je sais que * est dangereux. envie de discuter des problèmes de performance concernant.
  • Pour SQL Server, voir sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/...
  • double possible de Pourquoi est-SELECT * considéré comme nocif?
  • pas seulement PostreSQL et Oracle, aussi dans Microsoft SQL

InformationsquelleAutor Neel Basu | 2010-07-05