一、 SELECT * 的含义

select * 语句是从指定的表中按照顺序返回所有列。

二、 SELECT * 的优缺点

1  优点

在实际开发过程中,大家习惯性地使用select *  from  table_name进行数据查询,当然使用*代替具体的字段名称有一些优点。

主要优点有如下几个方面:

1.1  减少代码量

一定程度上减少了代码量,不需要输入具体的字段,用一个星号就可以代替所有字段。

1.2  避免输入错误

无需知道字段名,避免输入具体字段的繁琐或输入错误。

1.3  提高代码复用率

当被查询的表新增字段时,无需修改select语句的代码,一定程度上提高代码复用率。

2  缺点

在实际开发过程中,尽管使用select * 具有一定的优点,但同时存在很大的问题和隐患:

2.1  增加网络开销和传输时间

用select * 时查询分析器需要解析更多的对象、字段、权限、属性等相关内容,在 SQL 语句复杂,硬解析较多的情况下,会对数据库造成沉重的负担。

另外使用select * 有时会误带上无需使用的字段或者一些大文本字段,数据传输size会几何增涨,增大网络开销。

2.2  无法使用覆盖索引,增加查询成本

select * 杜绝了覆盖索引的可能性,而基于MySQL优化器的“覆盖索引”策略又是速度极快,效率极高,业界极为推荐的查询优化方式。

比如对于下面的两句sql:

select col1 from table;

select * from table;

如果col1字段包含索引信息,那么此时,这两句的sql执行时间可能会有几十上百倍的差异。

在col1字段有索引的情况下,MySQL是可以不用读data,直接使用index里面的值就返回结果的。但是一旦用了select *,就会有其他列需要读取,这时在读完index以后还需要去读data才会返回结果。这样就造成了额外的性能开销。

2.3  可读性和扩展性差

使用*代替了表中所有的字段名,但是对于不熟悉代码库的人,将不得不查看文档或者表结构以了解更改之前返回的列。从长远来看,如果表结构变更需要修改代码,可能耗费开发人员更多的时间和精力。

采用 select * 进行查找时,查询到的列是按照它们在表的原始位置展示的,如果更改表结构,会导致难以察觉的错误。比如:在做数据同步时,字段顺序发生了变化,会导致表中的数据错乱。对于引用该表的视图,如果增加了字段,会导致查询视图时返回无用的数据,查询性能变差。

三、 SELECT * 的使用场景

1  临时查询的场景

当调试SQL特别是某一表自己不熟悉的时,select *就显得很友好了。这样表的列名越长、表中的字段个数越多,使用select *时就非常实用和方便。

2  查询大量字段或者所有字段的场景

对于一些特殊的场景,比如做数据备份和数据同步,往往需要查询表中所有的字段,此时使用select * 一方面可以减少代码量,非常明确地知道是备份表中所有的字段;另一方面避免输入具体字段的繁琐或输入错误。
比如下面的两个sql:

create table  abc_backup  as  select * from abc ;

insert into  abc_new  select * from abc ;

如果只需要查询该表中的少量字段,或者表中有些字段数据很大,查询时又不需要,没必要使用select *。

3  * 表示一行数据的场景

(1)比如以下统计表中行数的sql:

select count(*) from table;

在此用例中“*”表示“数一下行数”,如果用列名替代这表示要数一下列对应值不为NULL的行数,COUNT(*)才是本质意义的行数。
(2)以下类型的Query也是一样的:

SELECT a.ID FROM TableA a

WHERE EXISTS (

SELECT *

FROM TableB b

WHERE b.ID = a.B_ID);

在这个语句中,“*”就是表示“一行”。

select * 的使用说明的更多相关文章

  1. 最全的ORACLE-SQL笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unloc ...

  2. Matplotlib数据可视化(6):饼图与箱线图

    In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...

  3. HTML在Select具体的使用说明

    <html> <head> <SCRIPT LANGUAGE="JavaScript"> <!-- //oSelect 列表的底部加入了一 ...

  4. 2、应用程序及驱动-poll和select使用说明

    1.poll机制(如果中断机制出问题了,poll机制是对中断机制的补充,比如等一个小孩,如果小孩生病了,因此隔一段时间应该去找他) poll机制就是给定一段时间,在这一段时间内程序处于睡眠状态一直等待 ...

  5. js模仿ios select效果

    github:https://github.com/zhoushengmufc/iosselect webapp模仿ios下拉菜单 html下拉菜单select在安卓和IOS下表现不一样,iossel ...

  6. HTML Select 标签选择后触发jQuery事件代码实例

    页面设计原由: 因为很多客户不知道如何来到我们公司,领导想让我在微信公众号上面做一个链接,客户可以直接通过微信公众号打开地图并导航到我们公司的办公地点. 实现起来并不难,但由于公司有很多办事处,所以需 ...

  7. Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  8. Map工具系列-03-代码生成BySQl工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  9. jQuery验证控件jquery.validate.js使用说明

    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...

  10. 006_Salesforce Sharing 使用说明

    Salesforce Sharing 使用说明 背景说明:Salesforce共享实施记录和其它数据时,需要员工之间共享或多个用户在一个组织间的共享.然而,共享这些数据是有风险的,尤其是当它涉及到敏感 ...

随机推荐

  1. Mycat 实现分库分表及读写分离

    本文为博主原创,未经允许不得转载: Mycat 官网: http://mycat.org.cn/ MyCat 权威指南 文档:http://www.mycat.org.cn/document/myca ...

  2. css - 使用 figure 和 figcaption 快速实现 图片加文字的垂直方向的布局 ( 不支持ie9以下版本 )

    一,属性介绍 1. 浏览器支持 注释:Internet Explorer 8 以及更早的版本不支持 <figure> 标签.Internet Explorer 9, Firefox, Op ...

  3. Git-远程仓库-remote-pull-push

  4. mongo-连接失败

    连接mongo失败 默认情况下,mongo最大支持65535个连接 查询当前支持的连接数 db.serverStatus.connections { "current" : 3,/ ...

  5. [转帖]Use TiFlash

    https://docs.pingcap.com/tidb/v5.0/use-tiflash 8 Contributors After TiFlash is deployed, data replic ...

  6. [转帖]window10下如何安装fio

    1.fio下载地址(实测有效): https://github.com/axboe/fio/releaseshttps://github.com/axboe/fio/releases 其他的地址如​​ ...

  7. Nacos集群启动注意事项

    简介 Nacos是阿里巴巴开源的一套服务注册发现的应用 使用简单灵活, 是spring Cloud Alibaba的组成部分 现在拆分微服务的部署情况下,极大的需求nacos服务作为支撑 单点情况下存 ...

  8. 某环境私有云 rpm 包安装失败总结

    1. 最近公司同事说一个项目搭建环境时 rpm 安装mysql数据库会报错 错误图片主要如下: 第一个错误提示是 提示 /etc/host.conf line 2: bad command `nosp ...

  9. 《Javascript高级程序设计》读书笔记——构造函数与原型

    构造函数与原型 构造函数模式 最简单的构造函数: function Person(name, age, job) { this.name = name; this.age = age; this.jo ...

  10. Spring 应用合并之路(一):摸石头过河 | 京东云技术团队

    公司在推进降本增效,在尝多种手段之后,发现应用太多,每个应用都做跨机房容灾部署,则最少需要 4 台机器(称为容器更合适).那么,将相近应用做一个合并,减少维护项目,提高机器利用率就是一个可选方案. 经 ...