如何理解select(1)、select(*)、select(column)背后的差异?

news2024/9/20 11:01:12

bff7490e259c1106988d195965cb0af0.jpeg

先说结论

  • select(1)、select(*)都是基于结果集进行的行数统计,统计到NULL行

  • select(column)则受到索引设置的影响,默认会排除掉NULL行

在数据库查询中,SELECT语句用于从数据库表中检索数据。SELECT (1)SELECT (*)SELECT (column)之间的差异主要在于它们返回的数据类型和范围:

  1. SELECT (1)

    1. 这个语句返回一个单一的值,即数字1。它不从表中检索任何数据,而是直接返回一个常量。

    2. 这种查询通常用于测试数据库连接是否正常,或者在某些情况下,用于生成一个占位符或标识符。

    3. 它不依赖于表的结构,因此与表中的列数或列名无关。

  2. SELECT (*)

    1. 这个语句返回表中的所有列和所有行的数据。

    2. 使用星号(*)作为通配符,意味着选择所有列。

    3. 这种查询在需要获取表的完整快照时非常有用,但在处理大量数据时可能会影响性能,因为它需要传输更多的数据。

  3. SELECT (column)

    1. 这个语句返回表中指定列的所有行的数据。

    2. 你需要指定具体的列名,这将只返回那一列的数据。

    3. 这种查询在只需要表中特定列的数据时非常有用,可以提高查询效率,因为它只传输所需的数据。

实践案例

我们新建一个表user2,该表没有索引哦。

drop table user2;
CREATE TABLE `user2` (
        `id` bigint  COMMENT '主键',
  `name` varchar(255) COLLATE utf8mb4_unicode_ci  DEFAULT '' COMMENT '账号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'
;

继续插入有效数据和空数据

INSERT INTO user2(id, name)
values
(1, '111');


INSERT INTO user2(id, name)
values
(null, null);

我们验证下sql:

SELECT 1 from user2;
SELECT * from user2;
SELECT count(1) from user2;
SELECT count(*) from user2;
SELECT count(id) from user2;
  • SELECT 1 from user2;

1cfe34652ff31df222534d90ffde79b1.png

  • SELECT * from user2;

b8f658af5f8d3c64372715f69cd6d4b8.png

  • SELECT count(1) from user2;

9a4b3fc783418757d28a562162cadffb.png

  • SELECT count(*) from user2;

79363acfb2631df15a449e93fcc3a747.png

  • SELECT count(id) from user2;

dd7196add0dc1f85df1a2adeccc2fcb5.png

验证

  • 功能差异

select(1)、select(*)的效果其实一样,都是完成对全表扫描之后,再进行数据统计,甚至包括了NULL行。

SELECT count(id) 则是会过滤掉NULL行。

  • 性能差异

select(1)、select(*)则不会走索引。

7daca912994134f3a82c486a843a2dc9.png

SELECT count(id) 如果id列有索引,则会走聚簇索引来统计所有行列表,并排除NULL行。

ALTER table user2
add  key(`id`);

866f5a1ec440fc007dc1c68ca916a2a2.png

总结

在实际应用中,选择哪种类型的SELECT语句取决于你的具体需求。

  1. 如果你只需要检查数据库连接,可以使用SELECT (1)

  2. 如果你需要表中的所有数据,使用SELECT (*)

  3. 如果你只需要特定列的数据,那么应该使用SELECT (column)来提高效率,并辅助索引。

此外,SELECT (1)SELECT (*)在某些数据库系统(MyIsam)中可能会被优化以使用索引或直接从元数据中获取信息,这取决于数据库的实现和查询优化器的策略。

SELECT (column)通常会直接访问表中的数据,除非该列上有索引;尤其是在支持多事务的InnoDB里。

在设计查询时,应该考虑到性能和资源消耗,特别是在处理大型数据库时。选择性地检索数据可以显著减少网络传输的数据量,加快查询速度,并减少对数据库服务器的压力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第 7 章 B+树索引的使用

7.1 索引的代价 空间上的代价 每建立一个索引都要为它建立一棵B树,B树的每一个节点都是一个数据页,一个页默认占用16KB的空间。 时间上的代价 每次对表中的数据进行增、删、改操作时,都需要去修改各个B树索引。 一个表上的索引越多&#x…

从零上手CV竞赛Task2 # Datawhale AI夏令营

文章目录 平台参赛平台云平台 Task 1 从零上手CV竞赛下载baseline相关文件一键运行baseline!(大约需要25分钟)赛题解析数据集提交结果违法标准注意事项 下载生成的文件结果如图最后要记得关机 不然一直消耗算力 Task 2 建模方案解读与进阶物体…

光性能 -- OMA(光调制幅度)

基本概念 OMA(Optical Modulation Amplitude):光调制幅度,是光信号测试中的一项指标。是指光模块接收到的信号”1”的光功率和信号“0”的光功率的差值。即: Pavg(average optical power)&#…

WxPython可视化编辑器

作者:陈炳强 WxPython是python的一个用来写桌面程序的模块,目前只写了小部分功能跟组件, 用Python写中文,非常方便! 下载地址:https://pan.quark.cn/s/ba19b2472246

LabVIEW如何适应航天系统的要求

随着航天任务的复杂性和精确性要求不断提高,软件系统在其中扮演的角色变得愈发关键。LabVIEW凭借其强大的实时数据处理能力、高可靠性、以及灵活的系统集成和仿真工具,已逐渐成为满足航天系统需求的重要开发平台。通过全面适应航天工程的严格标准&#x…

守护电动“心脏”!仿真APP在汽车电池包随机振动分析中的应用

汽车电动化、智能化、绿色化发展已成为全球各国应对气候变化、实现低碳发展的共同选择。在此背景下,新能源汽车持续高速发展。电池包作为新能源汽车的“心脏”,是其主要动力来源,直接影响车辆的续航里程与行驶安全。电池包结构的安全可靠性对…

Linux——性能调优工具一览

一、CPU 1.调优工具 根据指标找工具 性能指标工具说明 平均负载 uptime、top uptime最简单、top提供了更全的指标 系统整体CPU使用率 vmstat、mpstat、top、sar、/proc/stat top、vmstat、mpstat只可以动态查看,而sar还可以记录历史数据 /proc/stat是其他性…

界面控件Telerik UI for ASP.NET Core 2024 Q2亮点 - AI与UI的融合

Telerik UI for ASP.NET Core是用于跨平台响应式Web和云开发的最完整的UI工具集,拥有超过60个由Kendo UI支持的ASP.NET核心组件。它的响应式和自适应的HTML5网格,提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。 本文将介绍界面组件Teler…

【MySQL 11】索引 (带思维导图)

文章目录 🌈 一、索引介绍⭐ 1. 索引的概念⭐ 2. 索引的分类⭐ 3. 索引的价值 🌈 二、认识磁盘⭐ 1. MySQL 与存储⭐ 2. 磁盘的物理结构⭐ 3. 磁盘的随机访问与连续访问 🌈 三、MySQL 与磁盘交互⭐ 1. MySQL 与磁盘交互的基本单位⭐ 2. MySQL…

一文深度了解堆

什么是堆? 堆(Heap)是一种基于数组的树形数据结构,其中每个节点都有一个值,且每个节点的值都大于等于(或小于等于)其子节点的值。堆分为大顶堆(Max Heap)和小顶堆&#…

回答网友一个C#对话框位置的问题

起因 ‭ 2024-08-28 19:40:20 colorDialog 打开出现的 位置控制不了 鸽子 2024-08-28 20:06:06 你是可以控制的 ‭ 0:00:47 试了下没用,可能是系统 问题吧 代码 位置的设置 SetWindowPos(hWnd, IntPtr.Zero, 0, 0, 0, 0, 1); 核心代码 protected override IntPt…

django学习入门系列之第十点《django的模板语法》

文章目录 获取请求与响应request获取请求方式在url中传递值在结构体中传递值返回一个值读取HTML中的内容 重定向(跳转网页)往期回顾 获取请求与响应 request request是一个对象,封装了用户通过浏览器发送过来的所有数据获取请求方式 获取请…

Ai产品经理的探索:技能、机遇与未来展望

Ai时代的产品经理 随着人工智能(AI)的飞速发展,AI已经从一个前沿技术概念逐步演变为驱动各行业创新的核心力量。从智能助手到自动驾驶,从个性化推荐系统到图像识别,AI正在以不可思议的速度改变着我们的生活方式和工作…

python解释器[源代码层面]

1 PyDictObject 在c中STL中的map是基于 RB-tree平衡二元树实现,搜索的时间复杂度为O(log2n) Python中PyDictObject是基于散列表(散列函数)实现,搜索时间最优为O(1) 1.1 散列列表 问题:散列冲突:多个元素计算得到相同的哈希值 …

华为IS-IS实验及配置

AR1配置 #进入ISIS进程 isis 1 #配置设备类型为Level-1is-level level-1 #定义区域和System-ID等信息network-entity 49.0001.0010.0000.0001.00 #ISIS邻居命名is-name AR1 #接口配置IP和启用ISIS interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.0 isis ena…

【C++】C++ STL 探索:String的使用与理解

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶 这篇文章将带大家深入探讨C STL中的string使用与理解。在接下来的几篇文章中,我们将介绍…

WT2605C蓝牙语音芯片:引领糖尿病管理智能化,优化血糖仪音频与蓝牙传输方案

开发背景 全球糖尿病成人患者数量截至2021年约为5.37亿,并预计到2045年将增长至7.83亿。患病率不仅随年龄增长,还展现出明显的地域差异,例如巴基斯坦的患病率最高。此外,老年人群和某些特定地区的居民面临更高的糖尿病风险。 语音…

Leetcode 22. 括号生成 回溯 C++实现

Leetcode 22.括号生成 问题:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。 算法: 创建返回数组 ans ,和临时变量 path 。 当左括号数量 open 小于应填括号数 n 时&#…

【Python机器学习】NLP词中的数学——主题建模

目录 齐普夫定律 相关度排序 工具 其他工具 Okapi BM25 在文档向量中,词计数是有用的,但是纯词计数,即使按照文档长度进行归一化处理,也不能告诉我们太多该词在当前文档相对于语料库中其他文档的重要度信息。如果能弄清楚这些…

carla unreal engine源码:如何创建radar可视化探测锥

文章目录 前言一、C实现方法1、DrawDebugCone函数2、carla工程修改3、make launch4、探测锥验证 二、蓝图实现方法1、创建并打开蓝图2、打开蓝图事件图表3、绘制蓝图事件4、编译再运行 前言 1、在自动驾驶仿真调试以及测试过程中,我们经常会用到雷达的探测锥&#…