美文网首页程序员读书低钻写作者群
select * 和 select 所有字段的区别

select * 和 select 所有字段的区别

作者: 良月柒 | 来源:发表于2019-04-20 09:50 被阅读19次

    阅读本文大概需要 1 分钟。

    之前发过的文章中,关于 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」你懂得,给个赞呗。

    往期精彩回顾

    程序员接私活的7大平台利器

    select count(*) 底层究竟做了什么?

    删库后,除了跑路还能怎么办?

    MySQL索引优化看这篇文章就够了!

    选择 25k 的 996 还是 18k 的 965

    一个完整的 Web 请求到底发生了什么

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

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

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

    相关文章

      网友评论

        本文标题:select * 和 select 所有字段的区别

        本文链接:https://www.haomeiwen.com/subject/znlkgqtx.html