一、 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项目实践-webapp-mytomcat-day16

    目录 1. http协议 2. 自定义的web框架 3. 具体实现 4. 启动 1. http协议 CS架构 建立连接"三次握手" 断开连接 "四次挥手" 三次 ...

  2. Angular系列教程之父子组件通信详解

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  3. JQuery - CheckBox Prop 和 attr 的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Android——“EditText控件供获取最大长度的方法”

    package utils; import android.app.Activity; import android.content.Context; import android.text.Inpu ...

  5. 07 - HTTP

    HTTP 强烈推荐学习:HTTP | MDN 一 .基础概念 请求和响应报文 客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入响应报文中返回给客户端. 请求报文结构 ...

  6. [转帖]MySQL8.1来了:MySQL创新和长期支持(LTS)版本简介

    https://cloud.tencent.com/developer/article/2303772 在Oracle,我们不断寻找改进产品的方法,以更好地满足您的需求.我们很高兴推出MySQL创新和 ...

  7. [转帖]ipv6相关内核参数配置的优化实践

    https://zhuanlan.zhihu.com/p/605217713 调整ARP缓存大小 这个参数通常需要在高负载的访问服务器上增加.比如繁忙的网络(或网关/防火墙 Linux 服务器),再比 ...

  8. [转帖]在 TiDB 中正确使用索引,性能提升 666 倍

    https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/index-666 背景​ 最近在给一个物流系统做TiDB POC测试,这个系统是基于 ...

  9. [转帖]TiDB 热点问题处理

    TiDB 热点问题处理 本文介绍如何定位和解决读写热点问题. TiDB 作为分布式数据库,内建负载均衡机制,尽可能将业务负载均匀地分布到不同计算或存储节点上,更好地利用上整体系统资源.然而,机制不是万 ...

  10. [转帖]Jmeter接口测试:参数化

    Jmeter接口请求中的参数经常需要通过参数进行赋值 引用形式:${} 变量时:${变量名} 函数时,${_函数名(参数1,参数2,参数3)} 值中"${n}"中,n为变量名:&q ...