2010-03-24 11 views
10

Weiß jemand, wenn das Entfernen der Feldnamen aus einer INSERT-Abfrage zu Leistungsverbesserungen führt?SQL INSERT-Leistung Feldnamen wegzulassen?

ich meine, ist dies:

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

schneller für DB erreicht werden, anstatt dies zu tun:

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

?

Ich weiß, es könnte wahrscheinlich ein bedeutungsloser Leistungsunterschied sein, aber nur zu wissen.

Ich verwende normalerweise MySQL und PostgreSQL als DBs.

Antwort

12

Nein, eigentlich das Gegenteil! Zumindest für Microsoft SQL Server - Sie haben nicht angegeben, über welche Datenbank Sie sprechen .....

Wenn Sie die Felder weder in einem SELECT noch in einem INSERT angeben, dann die SQL Server-Abfrage Der Prozessor muss zuerst die Systemkataloge untersuchen, um herauszufinden, welche Felder tatsächlich verfügbar sind.

So würde ich immer empfehlen, die gewünschten Felder explizit auf SELECTs so viel wie auf INSERTs aufzuführen.

+2

+1 ich grundsätzlich einverstanden geändert wird, aber gewundert - wird es nicht muss das Schema im letzteren Fall trotzdem nach Spaltendefinitionen/Voreinstellungen abfragen? – Andy

+0

@Andy: vielleicht so - aber nur für eine Teilmenge der Felder - die Sie angeben. Bei INSERT ist der Unterschied extrem gering - aber für SELECTs lohnt es sich, die Felder explizit anzugeben - auch aus Geschwindigkeitsgründen –

+1

+1 Und auch die Lesbarkeit wäre für eine Einfügeabfrage mit sage 10 Spalten wirklich schlecht, wenn nicht Spezifizieren Sie die Spaltennamen. –

1

Nein, es ist nicht schneller. Die Datenbank muss prüfen, welche Felder in der Tabelle sind und trotzdem mit den Werten übereinstimmen.

Sie sollten immer die Felder in der Abfrage angeben, um den Code robuster zu machen. Wenn jemand die Reihenfolge der Felder in der Tabelle ändert, hört es auf zu arbeiten (oder schlechter schreibt die Daten in das falsche Feld), wenn Sie die Felder nicht angegeben haben.

1

Ich kenne keine Leistungsverbesserung durch Weglassen der Feldnamen, aber ich würde davon abraten für etwas anderes als Testing/einmal Inserts.

Ablesbarkeit leidet (Sie haben die Tabelle zu überprüfen, um zu sehen, was eingeführt wird, wo) und der Code brechen, wenn das Tabellenschema

Verwandte Themen