一、 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. mock.js使用

    前后端联调必备技术之Mock讲解 什么是Mock数据? 处于开发环境模拟接口返回的数据(用于开发状态后端还没给接口) 不会影响生产环境,只是方便我们还没与后端交互时,不阻塞我们开发流程 mock数据好 ...

  2. Go 标准库 net

    本篇文章主要介绍 Go 标准库中的 net 包,通过一个小例子介绍常用的 net 包函数/方法 Listen,Accept 和 Dial 等. 1. net 简介 Go 官网对 net 包的定义如下: ...

  3. ClickHouse的WITH-ALIAS是如何实现的

    ClickHouse的WITH-ALIAS是如何实现的 WITH-ALIAS包含相似但不同的两个特性: WITH <表达式> as <别名> WITH <别名> a ...

  4. LeetCode-Go:一个使用 Go 语言题解 LeetCode 的开源项目

    在中国的 IT 环境里,大多数场景下,学习算法的目的在于通过笔试算法题. 但算法书林林总总,有时候乱花渐欲迷人眼. 杜甫有诗云:读书破万卷,下笔如有神.不管选择哪本书,只要深入学习,分层次,逐层进阶, ...

  5. 分享这位大神的WPF界面设计系列视频

    本文结构: 前言 视频详情 搬运详情 总结 4.1 国内推荐WPF资源 4.2 B站是学习的天堂 4.3 去外面看看 4.4 个人给C/S同学建议 1. 前言 今天介绍油管上一个大佬发的WPF设计系列 ...

  6. -- spi flash 擦除接口调用HAL库不同函数的区别

    [描述] 在使用STM32F429操作W25Q128时,为验证flash工作正常,做简单的读写数据校验,在擦除接口中使用 HAL_SPI_Transmit 方法一直工作异常,使用 HAL_SPI_Tr ...

  7. VIte+Vue3 打包在本地 双击 index.html 打开项目

    npm i @vitejs/plugin-legacy --save import legacy from '@vitejs/plugin-legacy'; export default define ...

  8. [转帖]linux之iftop命令

    https://rumenz.com/rumenbiji/linux-iftop.html Linux安装iftop > yum install iftop -y > iftop 界面如下 ...

  9. /dev/null 先后顺序的问题

    https://blog.csdn.net/x1131230123/article/details/114317752

  10. 【网络流,dp】Gym102220A Apple Business

    Problem Link 有一棵 \(n\) 个点的完全二叉树(点 \(i\) 的父亲是 \(\lfloor i/2\rfloor\)),第 \(i\) 个点有 \(a_i\) 个苹果.现在有 \(m ...