2012-06-12 32 views
0

可能重複:
Which is faster/best? SELECT * or SELECT column1, colum2, column3, etcMySQL的指定查詢中的每個列,而不是使用SELECT *

我記得讀了許多年前的情景,你想選擇來自MySQL表的所有內容的效率更高,更好的做法是指定每一列,而不是使用懶惰效率較低的方法。

我很努力地找到這個在線的任何證據,所以我不確定它是否適用於更新版本的MySQL和PHP。

在我的SELECT中指定每一列而不是使用SELECT *是否更好?

SELECT * FROM golf_course WHERE id = 2; 

回答

2

Select *本質上效率較低,因爲數據庫必須查找列。此外,如果您有一次加入,則會發送不必要的重複數據,浪費數據庫和網絡資源,尤其是在每次查詢時都這樣做。最後,選擇*沒有指定列的順序,所以如果有人愚蠢地刪除並以不同的順序重新創建表格,可能會突然讓您的社會安全號碼顯示在表單的名字列中,或者報告。如果有人添加了一個您不想在任何地方展示的專欄(例如,出於審計目的或關於客戶的說明,您不希望客戶看到),那麼您遇到了麻煩。此外,如果您添加列,您需要確定它們應該顯示的位置,爲什麼不讓它們無處不在地出現。選擇*是一個非常糟糕的SQL反模式。

2

是的。

  • 您的查詢會更容易理解
  • 您只選擇您需要
  • 列如果指定所有列,它會更容易刪除那些你不以後要,但如果你沒如果您想稍後再做,您需要輸入所有列
  • 您可以根據需要安排列並在代碼中引用它們,即使稍後將更多列添加到表中
  • 您可以輕鬆地添加計算,拼接

性能的角度來看,我不知道

+0

此外,列順序未定義。對錶格的更改(添加)會影響您的代碼。 – Randy

+0

很明顯,讓代碼可以理解是一個問題,但我更關心性能。如果我在代碼庫中有'SELECT *'的_many_實例,這將影響我的應用程序的性能。我明白這不是一個好習慣,但我正在處理遺留代碼,當然我不會寫一個SELECT *查詢並將它轉儲到某個PHP中。 – crmpicco

+0

@Randy我之前的印象是這樣的好處會有更多的性能相關?以這種方式構建基本查詢是否有任何性能提升? – crmpicco

0

恕我直言,調用SELECT *將要讀哪裏僅調用所需的字段將是更高效的所有領域。而當您查詢較大的數據庫時,性能可能會受到影響使用SELECT *

+0

是的,很明顯,如果您在tableX中有10個字段,並且只需要5個,那麼您就指定了5個。但是我的問題是如果您有10個,而您需要10個 - 您應該指定10個還是10個只是'SELECT *'? – crmpicco

+0

'SELECT *'適用於這種情況。 –

+1

@marcus,不,它不會,select *不應該用於生產查詢,它是一個SQl反模式。數據庫仍然需要浪費時間查看列。 – HLGEM