阅读本文大概需要 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 请求到底发生了什么

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

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

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

转载于:https://blog.51cto.com/14057963/2381758

select * 和 select 所有字段的区别相关推荐

  1. select * 和 select 字段的区别

    参考文章:https://mp.weixin.qq.com/s/whCprUTlrhtgyTCIUyIJ3A 自己总结如下: 1.select * 和 select 字段在性能上没有什么差别 2.网络 ...

  2. select count(1) 、select count(*) 、select count(字段)的区别、及性能

    select count(*) from teacher; //11 select count(1) from teacher; //11 select count(id) from teacher; ...

  3. MySQL简单命令和SELECT查询,给字段起别名【MySQL数据库】

    Java养成计划----学习打卡第六十四天 内容导航 数据库的相关操作 数据库的导入 查看导入数据库中的表 查看表中的数据 查看表的基本结构[简化] 查看表的结构[详细] 查看mysql数据库的版本号 ...

  4. 深入理解select、poll和epoll及区别

    问题:如果我们先前创建的几个进程承载不了目前快速发展的业务的话,是不是还得增加进程数?我们都知道系统创建进程是需要消耗大量资源的,所以这样就会导致系统资源不足的情况. 那么有没有一种方式可以让一个进程 ...

  5. mysql select having_MySQL中SELECT子句WHERE和HAVING的区别

    MySQL中SELECT子句WHERE和HAVING的区别 WHERE子句: 在分组之前使用,表示从所有数据中根据条件筛选出部分数据,以完成分组的要求. 在一个WHERE子句中使用列别名是不允许的,因 ...

  6. Oracle中insert into select和select into的区别

    文章转自:http://www.linuxidc.com/Linux/2012-09/70984.htm 在Oracle中,将一张表的数据复制到另外一个对象中.通常会有这两种方法:insert int ...

  7. select * 和select 1,select count(*)和select count(1)

    目录 1.select * 和select 1 2.select count(*)和select count(1) 1.select * 和select 1 语法:select * from 表名称: ...

  8. select 1,select *,select count(),select sum(),select null

    select 1 from dual where a >20 查询后返回1列,所返回的列值均为1,返回的行数等于满足条件的行数: 同理, select 常量 from - where -,查询后 ...

  9. mysql within 函数_SQL基础----(四)复杂的子查询(select within select)

    (一) 关键知识点 1.1 消化阶梯任何知识点,均可遵循此消化路径 1.2 功能点 1.2.1 视图案例选中视图,右键刷新,将会呈现新创建的视图选中具体视图,右键弹出功能菜单,选择对应功能项注意事项 ...

最新文章

  1. 干货|最全面的卷积神经网络入门教程
  2. MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
  3. 数据库高级知识——主从复制
  4. 凝聚共识 聚力前行丨《数据库系统的分类和评测研究》报告发布
  5. eclipse打war包_jar包和war包的区别
  6. 大数据可视化平台可以实现什么功能
  7. 绝对的干货大放送:常用正则表达式收集大全
  8. 快速给pdf生成书签
  9. 句法结构中的语义分析
  10. 万王之王显示服务器尚未对外开放,《万王之王3》公测5月26日火爆开启 姚星彤性感代言...
  11. 研究了1天的ckfinder记录
  12. Math常用的数学运算(包括取整、取绝对值、保留几位小数等)
  13. HTML5期末大作业:游戏设计网站设计——游戏介绍(5页) 大学生游戏网页设计作业模板下载 网游网页设计作业成品 静态HTML手游网页制作下载_网页设计代码
  14. Connect Four四子棋c++程序 - 用户交互(1)
  15. C#注册机与绑定软件(转发自:韩兆新的博客园的C#学习笔记——软件注册与注册机)...
  16. c语言 实现markdown解析,marked
  17. mysql gbk排序规则_Mysql 字符集及排序规则
  18. golang-命令源码文件
  19. 面试请假攻略,不用裸辞也能找到工作
  20. 使用TextRank算法进行文本摘要提取(python代码)

热门文章

  1. 从摩尔定律到人工智能,指数定律释放人类潜能
  2. 为什么有的机器学习应用公司必将失败?
  3. AI一分钟 | 阿里云放大招要揽1000名AI人才,川普AI守国论遭遇54名科学家反对
  4. 吊打 ThreadLocal!
  5. 3天,我把MySQL索引、锁、事务、分库分表撸干净了!
  6. Java必会的工具库,让你的代码量减少90%
  7. Spring Boot 整合 Spring Security 示例
  8. KDD Cup 2020 多模态检索赛道:数据分析
  9. 特征工程(六)lsa和lda
  10. 重磅引才!符合条件博士生,给予300平以上别墅一幢!