select * 和 select 所有欄位的區別
之前發過的文章中,關於 select * 和 select 所有欄位的知識,有描述不恰當,這次重新糾正下,加深下理解。
MySQL 5.1.37
表記錄數 41,547,002,即 4000+w 行。
使用遠端客戶端取 1000 條資料,統計時間:
SELECT * FROM dmsp.dmsp_dimension_content LIMIT 0, 1000;
時間 2.218s,網路消耗 0.547s 。
SELECT id, appid, aop, t, uid, sid, pid, pname, bid, bname, ptype, sm, sv, bt, national, area, ov FROM dmsp.dmsp_dimension_content LIMIT 0, 1000;
取出所有欄位,時間 2.250s,網路消耗 0.578s 。
多次查詢(改變 limit 條件避免快取),時間變化不大。
結論:兩者差別幾乎可忽略。所以查詢所有欄位(或者大多數字段)的時候,大可 select * 來操作。如果某些不需要的欄位資料量特別大,還是寫清楚欄位比較好,因為這樣可以減少網路傳輸。
(1)減少資料的負擔。
SELECT *,需要資料庫先 Query Table Metadata For Columns,一定程度上為資料庫增加了負擔(影響網路傳輸的效能),但是實際上,兩者效率差別不大。
(2)考慮到今後的擴充套件性。
因為程式裡面你需要使用到的列畢竟是確定的, SELECT * 只是減少了一句 SQL String 的長度,並不能減少其他地方的程式碼。
(3)索引問題
select abc from table; 和 select * from table;
在 abc 欄位有索引的情況下,mysql 是可以不用讀 data,直接使用 index 裡面的值就返回結果的。但是一旦用了 select *,就會有其他列需要讀取,這時在讀完 index 以後還需要去讀 data 才會返回結果,這樣就造成了額外的效能開銷。
綜上:除平時練習使用,其他情況都不推薦使用 SELECT * FROM XXX 。
·END·
程式設計師的成長之路
路雖遠,行則必至
本文原發於 同名微信公眾號「程式設計師的成長之路」,回覆「1024」你懂得,給個讚唄。
往期精彩回顧
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902700/viewspace-2642021/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- select count(*)和select count(1)的區別
- select into from 和 insert into select 的用法和區別
- select for update nowait 與 select for update 區別AI
- select any dictionary與select_catalog_role的區別
- oracle taf type型別為session和select的區別Oracle型別Session
- insert into 與 select into 的區別
- Ask Hoegh(4)——select count(*)和select count(1)、count(column)有區別嗎?
- select、poll、epoll之間的區別
- mysql select欄位別名 不可以在select 或者where中使用 但是group by 與order by可以使用MySql
- insert into select 與 create table as的用法和區別(轉)
- 比較所有的欄位型別型別
- Oracle中select for update ...一些區別Oracle
- LOB欄位EMPTY_LOB和NULL的區別Null
- select into 時有無strict關鍵字的區別
- select、poll、epoll之間的區別總結[整理]
- C#中的屬性和欄位的區別C#
- sqlserver查詢一個庫所有表的欄位名及欄位型別SQLServer型別
- 使用 Eloquent ORM 使用 with 模型關聯查詢,如何處理select不同模型的欄位(欄位名可能相同)ORM模型
- 伺服器IO多路複用的select和poll的區別以及監聽套接字select函式的四個宏操作伺服器函式
- 如何清空select下拉選單的所有option項
- Laravel 中關聯模型查詢 +with 預載入中 select 必需欄位Laravel模型
- 在oracle中,select語句查詢欄位中非純數字值Oracle
- 深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
- select 下拉框用 Select select = new Select (element) 方法失敗
- JavaScript 獲取select下拉選單所有optionJavaScript
- js獲取select下拉選單的所有option項JS
- Oracle中檢視所有表和欄位以及表註釋.欄位註釋Oracle
- sql語句修改欄位型別和增加欄位SQL型別
- MySQL中TEXT與BLOB欄位型別的區別MySql型別
- SQLite中的SELECT子句使用別名SQLite
- 使用 LinqDataSource 控制元件的 Select 屬性進行資料欄位的組合控制元件
- mysqPoint型別查詢和插入操作:insert和select型別
- jQuery select下拉選單復位效果jQuery
- js 操作select和optionJS
- 關於mysql設定varchar 欄位的預設值''和null的區別,以及varchar和char的區別MySqlNull
- javascript獲取select下拉選單所有項的內容JavaScript
- js如何刪除select下拉選單的所有專案JS
- 匯出Oracle中的所有表和欄位的註釋Oracle