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 请求到底发生了什么

会写代码是你创业路上的包袱吗?

支付宝架构师眼中的高并发架构

最近话题火爆的四件事你知道不?

 

相关文章
相关标签/搜索