2010-02-09 72 views
1

可能重複:
Which is faster/best? SELECT * or SELECT column1, colum2, column3, etc.SELECT語句的性能

在一些代碼我讀,所有SELECT語句所使用的字段名稱的列表表格中的所有字段都被選中。例如,有一張桌子稱爲書和領域作者,PublishDate,Pages和價格,select語句如下:

SELECT Author, PublishDate, Pages, Price FROM Book; 

在應用程序中的所有選擇語句都是這樣的,這使得我不知道是否有增長在性能上這樣做對:

SELECT * FROM Book; 

我通過一個MySQL的書翻轉,但沒有看到與此相關的任何東西。考慮到每次添加字段時更改SELECT語句的維護開銷,我想知道將事情更改爲更短的語法。會引入性能問題嗎?這可能是安全相關的嗎?

+0

這可能是SO重複(看...)簡單地說,你應該在大部分時間使用顯式列表。 – mjv 2010-02-09 21:02:56

+1

確實重複。例如http://stackoverflow.com/questions/65512/which-is-faster-best-select-or-select-column1-colum2-column3-etc – mjv 2010-02-09 21:03:55

+1

而順便說一句,通常有[小但有效] _decrease_使用'SELECT *' – mjv 2010-02-09 21:05:33

回答

1

作爲程序設計的一般規則,幾乎總是一個明確的最佳實踐。

在維護方面,Select *並不能真正爲您節省很多,因爲在大多數情況下,使用該查詢的代碼將不得不更新。

如果您正在編寫的代碼只是盲目地在特定表格中發生的任何字段上運行,那麼您就會遇到麻煩。例如,向時間戳等表格添加某種維護列的DBA不會認爲它會突然顯示在您的應用中。確保未來應用的最佳方式是明確的。

此外,請不要忘記客戶端 - 服務器體系結構中的帶寬成本,以避免拖拽您不打算使用的數據列。

我做了一個更徹底的治療就這短短的文章中使用select *的性能影響我寫了一段時間後: "Don't Use Select *"

1

對性能幾乎沒有影響,但對代碼的可讀性和可擴展性影響很大。你也發送更多的數據到SQL服務器,因爲名稱比單個字符需要更多的空間。