2010-03-24 6 views
10

Est-ce que quelqu'un sait si la suppression des noms de champs d'une requête INSERT entraîne des améliorations de performance?SQL INSERT performance omettant les noms de champs?

Je veux dire est ceci:

INSERT INTO table1 VALUES (value1, value2, ...) 

plus rapide pour DB à accomplir plutôt que de faire ceci:

INSERT INTO table1 (field1, field2, ...) VALUES (value1, value2, ...) 

? Je sais que c'est peut-être une différence de performance sans signification, mais juste pour le savoir. J'utilise généralement MySQL et PostgreSQL comme DBs.

Répondre

12

Non, en fait, c'est le contraire! Au moins pour Microsoft SQL Server - vous n'avez pas spécifié de quelle base de données vous parlez .....

Si vous ne spécifiez pas les champs, dans un SELECT ou un INSERT, la requête de SQL Server Le processeur doit d'abord inspecter les catalogues système pour savoir quels champs sont effectivement disponibles.

Donc, je recommande toujours de lister explicitement les champs que vous voulez - sur les SELECT autant que sur les INSERT.

+2

+1 Je suis d'accord en principe, mais il se demande - sera pas avoir à interroger le schéma sur ce dernier cas pour les définitions de colonnes/par défaut de toute façon? – Andy

+0

@Andy: peut-être - mais seulement pour un sous-ensemble des champs - ceux que vous spécifiez. Pour l'INSERT, la différence peut être extrêmement marginale - mais pour les SELECTs, il vaut vraiment la peine de spécifier explicitement les champs - aussi pour des raisons de vitesse –

+1

+1 Et aussi la lisibilité serait vraiment mauvaise pour une requête d'insertion avec disons 10 colonnes si on ne le fait pas spécifiez les noms des colonnes. –

1

Non, ce n'est pas plus rapide. La base de données doit vérifier quels champs sont dans la table et faire la comparaison avec les valeurs de toute façon.

Vous devez toujours spécifier les champs dans la requête pour rendre le code plus robuste. Si quelqu'un change l'ordre des champs dans la table, il cesse de fonctionner (ou pire écrit les données dans le mauvais champ) si vous n'avez pas spécifié les champs.

1

Je ne connais pas d'amélioration des performances en omettant les noms de champs, mais je déconseille pour autre chose que des inserts de test/une seule fois.

Lisibilité souffrira (vous devez vérifier la table pour voir ce qui est inséré où) et votre code cassera si le schéma de la table est modifiée

Questions connexes