2010-03-24 37 views
10

有誰知道是否從INSERT查詢中刪除字段名稱會導致一些性能改進?SQL INSERT性能省略字段名稱?

我的意思是這樣的:

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

爲DB來完成,而不是做這個快:

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

我知道這可能是一個毫無意義的性能差異,但只是要知道。

我通常使用MySQL和PostgreSQL作爲數據庫。

回答

12

不,實際上恰恰相反!至少對於Microsoft SQL Server - 你沒有指定你在說什麼數據庫.....

如果你沒有在SELECT或INSERT中指定字段,那麼SQL Server的查詢處理器必須首先檢查系統目錄以確定哪些字段確實可用。

所以我總是建議明確列出你想要的字段 - 在SELECT上和在INSERT上一樣多。

+2

+1我原則上同意,但想知道 - 不會吧不管怎樣,必須在後一種情況下查詢列定義/默認的模式? – Andy 2010-03-24 18:26:25

+0

@Andy:或許如此 - 但僅限於字段的子集 - 您指定的那些字段。對於INSERT,差異可能是極其微小的 - 但對於SELECT,肯定值得明確指定字段 - 也是爲了速度原因 – 2010-03-24 18:27:57

+1

+1另外,對於插入查詢,如果有10個列,那麼可讀性會非常差指定列名稱。 – 2010-03-24 18:28:43

1

不,它不會更快。數據庫必須檢查表中的哪些字段,並與值匹配。

您應該始終指定查詢中的字段以使代碼更健壯。如果某人更改了表中字段的順序,那麼如果您沒有指定字段,則它將停止工作(或者更糟的是將數據寫入錯誤的字段)。

1

我不知道通過省略字段名稱可以提高性能,但是除了測試/一次插入之外,我會建議您不要這樣做。

可讀性將受到影響(你必須檢查表格看被插入哪裏是什麼),你的代碼將打破,如果表架構更改