有利用實現了性能增益:是否有利用實現了性能增益「選擇字段1,字段2,字段3 ...」,而不是「SELECT * ......」
SELECT Field1, Field2, Field3 ...
代替:
SELECT * ...
有利用實現了性能增益:是否有利用實現了性能增益「選擇字段1,字段2,字段3 ...」,而不是「SELECT * ......」
SELECT Field1, Field2, Field3 ...
代替:
SELECT * ...
如果列表字段1 .....表示可用列的子集,那麼答案是肯定的。更有效率取決於子集的多少。
對於每個處理過的行,根據列的類型有多個「每列」操作,這可以像將字節重新賦給整數邊界一樣小,或者像分配合適的內存塊一樣重要,來自另一個文件的大BLOB。
但是,大多數經驗豐富的程序員將始終編碼一個特定的列列表,即使只有很少或沒有性能優勢。最重要的原因有兩個,它有助於將程序與數據庫模式的變化隔離開來 - 程序不會在某人添加或重新排列列時爆炸,其次是可讀性,您不需要繼續返回數據庫模式來查看您的程序從表中獲得的內容,以及第三,它可以幫助進行影響分析,因爲您可以掃描源代碼以查看特定列的使用情況。
是的,有。它主要是通過選擇較少的列節省IO和網絡流量。這可能非常重要,因爲在客戶端花費的大部分時間來自數據庫服務器上的網絡和磁盤IO。這當然假設你選擇的是較少的列,然後在表中。
通常,您應該只選擇您要使用的字段。
這是一個很好的做法,因爲您還要確保您的查詢不受未來對該表的更改(列的添加)的影響。
+1,但我認爲OP想知道'select *'和'select field1,...'都返回相同數量的列的情況......但我可能是錯誤的offcourse。 – 2010-07-06 06:22:14
是的,這是正確的。我在談論它何時會返回相同數量的列。 – CJ7 2010-07-06 06:32:03
另一個性能問題是如果您在視圖中執行此操作。如果將select *放在視圖中,這會影響可以對視圖執行的索引,強制它們重新掃描表以找到要選擇的列的列表。
這裏有一個Q/A也提到了這一點 http://bytes.com/topic/sql-server/answers/480715-select-views
我的這個個人的經驗是,任何性能差異不是肉眼可見。但是,您仍然應該指定所需的列而不是*(除非在COUNT(*)之類的事情中),因爲如果表的定義發生更改,則應用程序不太可能以意想不到的方式失敗。
使用Microsoft Access時,如果指定字段名稱而不是「*」,則查詢速度會變慢 - 但對於許多着名的數據庫服務器,即使字段數相同,性能也會更好輸出。所以這取決於你選擇的數據庫。
可能重複[select * vs select column](http://stackoverflow.com/questions/3180375/select-vs-select-column) – 2010-07-06 06:25:36
不僅僅是性能,而是可伸縮性。如果表格更改,不但會降低您的性能,而且調用對象和/或應用程序DAL可能會中斷。正是由於這個原因,我喜歡使用表包裝UDF(表格函數,只需從表中選擇field1,field2,field3,我也在這裏指定提示 - NOLOCK等)。 – RPM1984 2010-07-06 06:32:47