select * 和 select 全部字段的區別

閱讀本文大概須要 1 分鐘。mysql

以前發過的文章中,關於 select * 和 select 全部字段的知識,有描述不恰當,此次從新糾正下,加深下理解。程序員

MySQL 5.1.37sql

表記錄數 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 條件避免緩存),時間變化不大。app

結論:二者差異幾乎可忽略。因此查詢全部字段(或者大多數字段)的時候,大可 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」你懂得,給個讚唄。

 

往期精彩回顧

程序員接私活的7大平臺利器

select count(*) 底層究竟作了什麼?

刪庫後,除了跑路還能怎麼辦?

MySQL索引優化看這篇文章就夠了!

選擇 25k 的 996 仍是 18k 的 965

一個完整的 Web 請求到底發生了什麼

會寫代碼是你創業路上的包袱嗎?

支付寶架構師眼中的高併發架構

最近話題火爆的四件事你知道不?

 

相關文章
相關標籤/搜索