2013-05-10 81 views
-2

我在某處讀取從不使用*來返回表中的所有列 - 這是懶惰的。在這種情況下,如果我需要的所有5列,也不會有後來的表進行任何更改,是否有在在SELECT查詢中使用*

SELECT * 
from table 

與任何演出差異

SELECT id,col1,col2,col3,col4 
from table 

感謝您的幫助。

+3

STOP upvoting這 – Kermit 2013-05-10 19:10:38

+2

這可能有助於事情會變得有趣[爲什麼SELECT *認爲是有害的?](http://stackoverflow.com/questions/3639861/why-is-選擇被認爲有害的) – Sam 2013-05-10 19:10:39

+2

真的沒有性能差異。這主要是一個警告,因爲在團隊環境中,你永遠不會知道什麼時候有人可以添加20列(其中一個是2M的blob)。這肯定會導致性能問題。 – 2013-05-10 19:11:02

回答

0

應該沒有什麼區別。這只是一個糟糕的做法 - 如果稍後修改table,它可能會打破一些更復雜的查詢(如跨多個表的查詢),如果它們使用*

+1

有些平臺有所不同。 – Kermit 2013-05-10 19:11:02

+0

@FreshPrinceOfSO例如? – wroniasty 2013-05-10 19:12:31

+2

[Bullet point 4](http://stackoverflow.com/a/3180435/679449)和[這篇文章](http://bi-bigdata.com/2012/09/02/select-vs-select-in -sql-server-query /) – Kermit 2013-05-10 19:14:52

3

我不認爲這是一個明顯的性能差異,但在生產代碼,我會用一個明確的列列表堅持:

  • 它更清晰
  • 有沒有辦法可以絕對知道有永遠不會被添加,刪除或更改
  • 它更容易稍後更新查詢如果你最終不得不一個JOIN添加到塔像做別名列
  • 列牛逼的查詢,如果保持SELECT *