回答
SELECT字段比選擇*更快。
因爲如果你在你的表有超過1場/列,然後選擇*將返回所有這些的,這需要網絡帶寬和更多的數據庫工作,以獲取所有其他領域。但是如果您只需要一個字段/列,數據庫負載就會減少,並且不需要傳輸不需要的信息,從而不必要地佔用帶寬資源。
我會贊成你,但我認爲你沒有真正回答這個問題。他試圖避免做出假設並接受罐頭智慧。我認爲他想看基準數字;我也做。這可以解釋爲什麼他還沒有接受你的答案,儘管所有的讚揚。 – 2010-11-18 14:57:13
在對同樣的問題的另一個答案中提出了其他幾個好處,我認爲這個問題罐頭智慧是正確的。我能想到的唯一好處是如果你懶惰,不想寫出所有的列......對於基準測試,您可以像在另一個線程中提到的那樣,自己嘗試一下,直到數據庫的命令出現爲止。 – rapadura 2010-11-18 23:36:13
我沒有足夠大的數據集來衡量差異。我可以僞造一些數據並衡量它,但是我剛剛測量了fakery。我正在監測這個問題,看看是否有人會在實際系統上測量實際數據時提出明確的答案。 *我可以從中學到一些東西。我已經讀過罐頭的智慧。現在告訴我一些我不知道的事情。 – 2010-11-19 00:19:56
Select *
據說比select <field list>
慢,因爲*需要額外的查找來獲取所有列。
此外,如果該表包含更多列(您不感興趣),爲什麼只讓他們忽略它們?
既然你提到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)
SELECT * 將檢索這可能是非常大的,特別是如果你有斑點的所有列。 黃金法則是選擇你需要的字段。
除了@ AntionoP的回答,使用SELECT field
的另一個好處是,如果字段被索引,MySQL可以直接從索引返回值,而無需查找數據行以獲取結果。
直接來自索引的任何引用,而不需要查找數據行以獲得結果。 – ajreal 2010-11-17 12:29:44
@ajreal - 這個鏈接引用了這個事實:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html – 2010-11-17 20:19:06
如果您的查詢有,這只是真實的(或有意義的)一個'WHERE'子句,並且匹配標準與索引具有相同的形式。也就是說,查詢類似於'select field from table'或'select field where from field where'LIKE'foo%''需要一個完整的列掃描,所以查詢索引列無關緊要。 – 2010-11-18 15:03:19
@littlegreen,完成!謝謝 :) – 2010-11-17 10:30:13
當嵌套查詢使用SELECT *
,有時查詢優化器會刪除你不這樣做的領域用於後續查詢。所以在這種情況下,這並不重要。但是你相信MySQL的查詢優化器嗎?要確定SELECT *
是否將不必要的字段添加到查詢計劃中,唯一的方法是直接使用EXPLAIN (..query..)
輸出它們來比較兩個查詢計劃。
也就是說,最簡單的方法是確實肯定是不會在生產查詢中使用SELECT *
。
- 1. SELECT SUM as field
- 2. MySQL SELECT WHERE'a'IN(`field`)
- 3. Knockout select field error databind
- 4. SELECT ... ORDER BY field IN(SELECT ...)not working on duplicate field
- 5. Aggregate&count「SELECT .... AS [Name]」field?
- 6. Mysql Select case case and field comparison
- 7. Django,Select related,Average,ManyToMany field
- 8. Validation engine with message over select field
- 9. T-SQL select語句中[field] + 0的用途是什麼?
- 10. 爲什麼如果($ row ['field'] == value)像SELECT WHERE field = value那樣工作?
- 11. SELECT field as mytest WHERE mytest IS NULL - field「mytest」not found?
- 12. jQuery中的$ field是什麼?
- 13. SQL Server「SELECT COUNT(field)FROM tblname」返回null
- 14. if field = 1 delete else update field =(field-1)
- 15. PHP select語句需要快速更正
- 16. {$ unset:{field:1}}中的含義是什麼
- 17. Protobuf「field 1」的意義是什麼?
- 18. GpsSatellite中field mValid的含義是什麼?
- 19. 爲什麼在我的屬性聲明「[field:NonSerialized]」中需要「field:」?
- 20. 爲什麼Method訪問看起來比Field訪問更快?
- 21. 爲什麼SELECT MIN(CAST(`field` as SIGNED))將我的結果值四捨五入?
- 22. php-fpm slowlog first field是什麼意思?
- 23. (jd)和(i,field)是什麼意思?
- 24. SQL where field in vs. where field = with multiple or?
- 25. MySQL UPDATE table1 where table1.FIELD = table2.FIELD
- 26. SQL查詢select中的列表其中field = value和otherfield = othervalue
- 27. 其中{table1.field} * = {table2.field}語法
- 28. PHP + UnixODBC + FreeTDS - SELECT [field] AS [name]不起作用
- 29. 如何製作select語句PDO並以$ row ['field']結尾
- 30. SELECT WHERE field!=值如何在mysql中完成?
可能的重複[什麼原因不使用'select *'?](http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select) – 2010-11-17 10:24:25