一、 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. Java面试——框架知识点

    Spring 概念 spring是个java企业级应用的开源框架.spring主要用来开发java应用,但是有些扩展是针对J2EE平台的文本应用.Spring框架目标是简化java企业级应用的开发,并 ...

  2. Linux复制安装 jdk 环境

    转载请注明出处: 最近在弄服务器环境,发现可以通过复制已安装 jdk 的服务器配置到新的服务器,并配置服务器环境变量配置文件就可以完成. 操作步骤如下: 1. 查看以安装jdk服务器的环境配置,并复制 ...

  3. C++中不支持strdup(),使用_strdup()

    1.问题 C4996 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conf ...

  4. 永久激活Windows10专业版及其它版本【亲测有效2022-03-16,两种方式】

    前言 小编最近使用公司的电脑,开始出现让你激活的提示,而且每次开机都会弹出来,小编忍住了:但是过不了半个月开始给你在桌面上显示了,一直显示和水印一样.小编忍无可忍,必须找个办法给你消灭掉!!,于是小编 ...

  5. SpringMVC06——数据绑定——2021-05-09

    数据绑定介绍 在执行程序时,SpringMVC会根据客户端请求参数的不同, 将请求信息中的信息以一定的方式转换并绑定到控制器类的方法参数中. 在数据绑定过程中,SpringMVC框架会通过数据绑定组件 ...

  6. Git-签名-user-email

  7. [转帖]JVM随笔 --- 安全点(safe point)与 安全区域( safe region)

    https://zhuanlan.zhihu.com/p/461298916 11 人赞同了该文章 最近回顾 JVM safe point 与 safe region 又有一些新的感悟与收获,特别写篇 ...

  8. [转帖]k8s对接ceph,ceph-csi方式

    1.上传ceph-csi-yaml和ceph-csi-image 两个文件夹到服务器 2.加载 ceph-csi-image里面的镜像 3.将加载好的镜像上传到本地harbor上. 4.修改ceph- ...

  9. 【转帖】Linux创建软连接出现的错误及解决方法

    问题: 创建软连接以后,使用cd 软连接路径显示没有那个文件或目录. 创建过程及切换结果,如图: 原因: 路径一定要写成绝对路径!!! 解决办法: 了解创建软连接的命令: ln -s 源文件 目标文件 ...

  10. [转帖]dd命令中dsync和fsync区别

    在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及几个常用参数:sync.dsync.fsync与fdatasync # dd if=/dev/zero of=/tmp/1G bs= ...