2010-11-17 37 views

回答

15

SELECT字段比選擇*更快。

因爲如果你在你的表有超過1場/列,然後選擇*將返回所有這些的,這需要網絡帶寬更多的數據庫工作,以獲取所有其他領域。但是如果您只需要一個字段/列,數據庫負載就會減少,並且不需要傳輸不需要的信息,從而不必要地佔用帶寬資源。

+0

我會贊成你,但我認爲你沒有真正回答這個問題。他試圖避免做出假設並接受罐頭智慧。我認爲他想看基準數字;我也做。這可以解釋爲什麼他還沒有接受你的答案,儘管所有的讚揚。 – 2010-11-18 14:57:13

+0

在對同樣的問題的另一個答案中提出了其他幾個好處,我認爲這個問題罐頭智慧是正確的。我能想到的唯一好處是如果你懶惰,不想寫出所有的列......對於基準測試,您可以像在另一個線程中提到的那樣,自己嘗試一下,直到數據庫的命令出現爲止。 – rapadura 2010-11-18 23:36:13

+0

我沒有足夠大的數據集來衡量差異。我可以僞造一些數據並衡量它,但是我剛剛測量了fakery。我正在監測這個問題,看看是否有人會在實際系統上測量實際數據時提出明確的答案。 *我可以從中學到一些東西。我已經讀過罐頭的智慧。現在告訴我一些我不知道的事情。 – 2010-11-19 00:19:56

4

Select *據說比select <field list>慢,因爲*需要額外的查找來獲取所有列。
此外,如果該表包含更多列(您不感興趣),爲什麼只讓他們忽略它們?

1

既然你提到mysql,我只是測試「SELECT字段」是更快的。你爲什麼不自己測試一下呢?

在Linux上:

time (echo "SELECT * FROM table" | mysql -u username --password=passwd database > /dev/null) 

time (echo "SELECT field FROM table" | mysql -u username --password=passwd database > /dev/null) 
+0

謝謝 - 我沒有工作中的本地開發環境,我知道不專業。感謝您向我展示如何在Linux中測試這些內容。我有很多比較,我想優化我的查詢。 – liamfriel 2010-11-17 11:01:21

+0

然後,我會說,你必須得到的第一件事是本地開發環境:) – Simone 2010-11-17 11:03:49

+0

不要執行列出的命令,因爲它們將在你的bash歷史記錄中以明文結束。 – 2013-04-02 20:04:57

2

SELECT * 將檢索這可能是非常大的,特別是如果你有斑點的所有列。 黃金法則是選擇你需要的字段。

5

除了@ AntionoP的回答,使用SELECT field的另一個好處是,如果字段被索引,MySQL可以直接從索引返回值,而無需查找數據行以獲取結果。

+0

直接來自索引的任何引用,而不需要查找數據行以獲得結果。 – ajreal 2010-11-17 12:29:44

+0

@ajreal - 這個鏈接引用了這個事實:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html – 2010-11-17 20:19:06

+0

如果您的查詢有,這只是真實的(或有意義的)一個'WHERE'子句,並且匹配標準與索引具有相同的形式。也就是說,查詢類似於'select field from table'或'select field where from field where'LIKE'foo%''需要一個完整的列掃描,所以查詢索引列無關緊要。 – 2010-11-18 15:03:19

1

當嵌套查詢使用SELECT *,有時查詢優化器會刪除你不這樣做的領域用於後續查詢。所以在這種情況下,這並不重要。但是你相信MySQL的查詢優化器嗎?要確定SELECT *是否將不必要的字段添加到查詢計劃中,唯一的方法是直接使用EXPLAIN (..query..)輸出它們來比較兩個查詢計劃。

也就是說,最簡單的方法是確實肯定是不會在生產查詢中使用SELECT *

相關問題