摘要:介绍 select * 和 select 字段的区别,建议各位不要使用 select *

  在千万级表中查询数据的时候,需要千方百计提升查询效率,为用户带来最爽的体验;业界各位大佬都提到 select * 的效率会低于select字段,且推荐使用select字段。就连《阿里Java开发手册》也明确表示不得使用 select * 作为查询的字段列表,更是让这条金科玉律拥有了权威的加持。

查询效率

  select * 在系统解析的时候,会多一步从系统表获取具体字段、权限、属性等相关内容的步骤,即先执行Query Table Metadata For Columns,一定程度上为数据库增加了负担。而后者无此过程。

网络带宽

  结果集的数据量也会直接影响响应速度。select * 会查出所有的字段,有些是不需要的。尤其是当应用程序和服务器不在同一个局域网时,冗余字段过多,会影响网络传输的性能。这一点在查询表存在大字段的情况下愈发明显,大量数据的传输必然消耗更多网络带宽,拖慢传输速度。

结果集扩展能力

  在表结构保持不变的前提下,核心结果集相同,但是select 字段的顺序可以调整,select * 则固定不变,和表结构中字段定义顺序保持一致。如果修改了表结构,select * 能够获得新表结构的所有字段;select 字段在增加字段时不会输出新字段,而且若被查询字段出现被重命名或者被删除的情况,则会报错。

应用场景

  select * 效率稍低但是能应对频繁调整的表结构,适应力强,可应用于开发环境,仅极少数特殊业务场景会在生产环境使用;后者效率稍高,语义明确,更能清晰的表达业务需求,强烈推荐在生产环境中使用。

覆盖索引

  在 MySQL 中,索引和数据是存在一起的,如果查询的数据和搜索条件在某个索引上就能够找到,也就是使用了覆盖索引,能够直接摒弃回表操作,减少IO次数,速度必然比去磁盘扫描快的多。如果 MySQL 和应用程序不在同一台机器,那么这种开销就会更加明显。因此,在使用 select 的时候,建议让搜索的字段和查询条件是索引上的字段信息。

连接查询时,* 无法进入缓冲池

  MySQL 中连接查询的原理是先对主表(驱动表)进行查询操作,然后再用从驱动表得到的数据作为条件,逐条的到被驱动表进行查询。

  每次驱动表加载一条数据到内存中,然后被驱动表所有的数据都需要往内存中加载一遍进行比较。效率很低,所以mysql中可以指定一个缓冲池的大小,缓冲池大的话可以同时加载多条驱动表的数据进行比较,放的数据条数越多性能io操作就越少,性能也就越好。所以,如果此时使用select * 放一些无用的列,只会白白的占用缓冲空间,浪费本可以提高性能的机会。

结束语

  文章到这里就结束了,看完之后你有什么想法想要跟大家分享呢?评论区在等着你!

Reference

select * 和 select 字段的区别的更多相关文章

  1. select * 和 select 所有字段的区别

    阅读本文大概需要 1 分钟. 之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解. MySQL 5.1.37 表记录数 41,547, ...

  2. mysql SELECT FOUND_ROWS()与COUNT(*)用法区别

    在mysql中 FOUND_ROWS()与COUNT(*)都可以统计记录,如果都一样为什么会有两个这样的函数呢,下面我来介绍SELECT FOUND_ROWS()与COUNT(*)用法区别   SEL ...

  3. 关于Select * 与Select 字段名 的问题!

    [转]http://blog.csdn.net/tongyu2009/article/details/8252418 1.SELECT * 语句取出表中的所有字段,不论该字段的数据对调用的应用程序是否 ...

  4. 子查询 做where条件 做 from的临时表 ,做select的一个字段 等

    子查询 做where条件 做 from的临时表 ,做select的一个字段 等

  5. sql判断以逗号分隔的字符串中是否包含某个字符串--------MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

    sql判断以逗号分隔的字符串中是否包含某个字符串---------------https://blog.csdn.net/wttykj/article/details/78520933 MYSQL中利 ...

  6. select和epoll最大的区别

    先说说阻塞,因为一个线程只能处理一个套接字的I/O事件,如果想同时处理多个,可以利用非阻塞忙轮询的方式,伪代码如下: while true { for i in stream[] { if i has ...

  7. select * 和 select 字段的速度对比

    拿WordPress的数据库做一个对比 SELECT ID,post_title, post_author FROM wp_posts ORDER BY ID LIMIT 100; OK, Time: ...

  8. 转载-select、poll、epoll区别总结

    I/O多路复用——epoll函数 select.poll.epoll区别总结 一.select.poll.epoll区别总结   1 本质上都是同步I/O 三者都是I/O复用,本质上都属于同步I/O. ...

  9. select * 和select 1 以及 select count(*) 和select count(1)的区别

    select 1 和select * select * from 表:查询出表中所有数据,性能比较差: select 常量 from 表:查询出结果是所有记录数的常量,性能比较高: selelct 常 ...

  10. MySQL select 语句指定字段查询

    指定字段查询 SELECT 语法 SELECT [ALL | DISTINCT] {* | table.* | [table.field1[as alias1][,table.field2[as al ...

随机推荐

  1. xshell连接Win10下子系统Unbuntu

    自带的ssh server不好用,需要先卸载再安装. 1. 卸载 ssh server sudo apt-get remove openssh-server 2. 安装 ssh server sudo ...

  2. 如何学习 ROS+PX4

    博客地址:https://www.cnblogs.com/zylyehuo/ 参考 https://www.bilibili.com/video/BV1vx4y1Y7Tu?spm_id_from=33 ...

  3. 在 Hugging Face Spaces 上使用 Gradio 免费运行 ComfyUI 工作流

    简介 在本教程中,我将逐步指导如何将一个复杂的 ComfyUI 工作流转换为一个简单的 Gradio 应用程序,并讲解如何将其部署在 Hugging Face Spaces 的 ZeroGPU 无服务 ...

  4. 【电脑】重装Win10之后无法唤醒和正常关机(Y9000P 2022)

    问题: Y9000P 2022 改Windows10后经常关机关不全(自带键盘灯亮,电源指示灯不灭),这还不是最重要的,它一会儿不用到时间自动休眠后还经常唤醒不了 解决: 两个问题,总结一下: 一.关 ...

  5. java一个校验对象是否为null的豪华大礼包

    自写的校验所有类型是否为null的工具类, 懒人福音,嘎嘎好用. 1 /** 2 * 一个校验对象是否为null的豪华大礼包 3 * 可以校验:Collection,Map,String,Enumer ...

  6. ESP32+Arduino入门(四):OLED屏随机显示古诗

    前言 我觉得去做一些简单又好玩的案例是入门很好的选择. 在实践的过程中会碰到很多需求很多问题在解决这些需求这些问题的过程就是在学习的过程. 今天我来分享一个随机显示古诗的案例,如果对此感兴趣可以跟我一 ...

  7. C#关键字:in、out、ref、in T、out T、[In]、[Out]这些你都知道多少?

    in.out 和 ref 关键字 首先我们来说in.out 和 ref ,在 C# 中,in.out 和 ref 是用于方法参数的引用传递.在引用传递过程中,形参和实参都是指向相同的引用地址. 名称 ...

  8. 《PDPU: An Open-Source Posit Dot-Product Unit for Deep Learning Applications》(三)

    Supporting suitable alignment width: In several designs [8] [19], quire [33] format is adopted to re ...

  9. 宽带带宽和网速的关系,为什么1m等于128kb

    带宽单位是:b(比特/位) 网速单位/文件下载上传单位:B(字节) 所以,1Mbps = 1/8Mbps = 128kb/s

  10. 119K star!无需GPU轻松本地部署多款大模型,DeepSeek支持!这个开源神器绝了

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "只需一行命令就能在本地运行Llama 3.DeepSeek-R1等前沿大模型,支 ...