面试官:一千万的数据,要怎么查?

news2024/11/26 15:37:50

一个老生常谈的问题,SELECT *和SELECT具体字段那个快?在数据量少的时候可能没什么差别,但是数据量达到千万级,差距就显现出来。废话不多说,往下看 ↓。

 

SELECT * 和 SELECT 具体字段的区别

在 MySQL 中,SELECT * 和 SELECT 具体字段是两种不同的查询方式。

  • SELECT *:用于选择所有列,这意味着从数据库表中检索每一列的所有数据。例如:SELECT * FROM users; 将检索 users 表中的所有列和数据。
  • SELECT 具体字段:只选择特定的列,这意味着只从数据库表中检索指定列的数据。例如:SELECT name, age FROM users; 将只检索 users 表中的 name 和 age 列的数据。

虽然 SELECT * 很方便,但它也有一些缺点。由于它选择了所有列,因此它可能会返回不必要的数据,这会增加网络传输和处理时间。此外,它还可能会影响查询性能,特别是在查询大型表时。

性能对比

为了比较 SELECT * 和 SELECT 具体字段的性能,我们使用了一个包含一千万数据的 MySQL 数据库。我们编写了两个查询语句,一个使用 SELECT *,一个使用 SELECT 具体字段,并使用 MySQL 的 EXPLAIN 命令来查看查询执行计划。然后,我们使用 MySQL 的性能测试工具 sysbench 进行测试。

为了比较SELECT *和SELECT具体字段的性能,我们创建了一个包含1000万行和5列的表。我们使用以下代码向表中插入数据:

CREATE TABLE test_table (
   id INT PRIMARY KEY,
   name VARCHAR(50),
   age INT,
   address VARCHAR(100),
   phone VARCHAR(20)
);

INSERT INTO test_table (id, name, age, address, phone)
SELECT
   FLOOR(RAND() * 10000000) AS id,
   CONCAT('Name', FLOOR(RAND() * 10000000)) AS name,
   FLOOR(RAND() * 100) AS age,
   CONCAT('Address', FLOOR(RAND() * 10000000)) AS address,
   CONCAT('Phone', FLOOR(RAND() * 10000000)) AS phone
FROM
   (SELECT n FROM seq_1_to_1000000) t1,
   (SELECT n FROM seq_1_to_1000000) t2,
   (SELECT n FROM seq_1_to_1000000) t3;

我们使用以下两个查询语句从表中检索数据:

-- 查询1:SELECT *
SELECT * FROM test_table WHERE age = 20;

-- 查询2:SELECT具体字段
SELECT name, age, address FROM test_table WHERE age = 20;

我们使用MySQL的BENCHMARK函数进行基准测试,每个查询语句重复10次,并记录每个查询语句的平均执行时间。测试使用的

以下是我们的测试环境和参数:

  • MySQL 5.7
  • Ubuntu 20.04
  • 16 vCPUs
  • 64GB RAM
  • sysbench 1.0.17
  • 1000万条数据

我们运行了每个查询语句 10 次,并记录了每个查询的平均响应时间和 CPU 使用率。以下是我们的测试结果。

SELECT *

Query

Average response time (ms)

CPU usage (%)

SELECT *

9.73

89.2

SELECT 具体字段

Query

Average response time (ms)

CPU usage (%)

SELECT name, age

3.98

77.8

从上面的结果中可以看出,使用 SELECT 具体字段查询的响应时间要快得多,并且使用的 CPU 也要少得多。

原因解释

其实原因不解释大家也都懂,为了水字数,我就再罗里吧嗦讲一遍吧!!!

为什么 SELECT 具体字段的查询性能更好呢?这是因为它只选择需要的数据列,而不是整个表的所有数据列。这意味着在网络传输和处理时间上,它要比 SELECT * 更加高效。此外,在查询大型表时,SELECT * 还会消耗更多的内存和 CPU,因为它需要处理所有列的数据。

除此之外,SELECT * 还可能会在查询性能上产生一些负面影响。例如,如果表中有大量的列,那么查询时就需要传输更多的数据,这会影响查询速度。另外,如果表中包含大量的文本或二进制数据,那么查询时传输的数据量也会很大,这会增加网络传输和处理时间。

因此,在实际开发中,我们应该尽可能地使用 SELECT 具体字段来查询数据。只选择需要的数据列,可以使查询速度更快,减少网络传输和处理时间,同时也可以减少内存和 CPU 的消耗。另外,还应该尽可能地避免查询大型表中的所有数据,以免对系统性能产生负面影响。

还有重中之重一点,假如具体字段上建立了索引,select具体字段可以直接返回结果,但是select要回表,这也是影响性能的关键。

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

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

相关文章

批量规范化

✨✨✨ 感谢优秀的你打开了小白的文章 “希望在看文章的你今天又进步了一点点,生活更加美好!”🌈🌈🌈 目录 1.批量规范化基本原理 2.批量规范化的使用 2.1对于全连接层 2.2对于卷积层 3.代码实现 3.1方式一 …

26488-24-4,Cyclo(D-Phe-L-Pro),具有良好的生物相容性

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 【产品描述】 Cyclo(D-Phe-L-Pro)环(D-苯丙氨酸-L-脯氨酸),环二肽是由两个氨基酸通过肽键环合形成,是自然界中小的环状肽。由于其存在两个酰胺键即四个可以形成氢键的位点,环二肽可以在氢…

商业海外社交媒体营销10步指南 [2023]

如今,社交媒体是任何成功商业战略的重要组成部分。这不是奢侈品,而是必需品。全球有超过 36 亿人使用社交媒体,它是企业展示其产品和服务、建立品牌知名度以及与客户联系的数字游乐场。 但这不仅仅是娱乐和游戏。要在社交媒体上取得成功&…

Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组

目录 329. 矩阵中的最长递增路径 Longest Increasing Path In A Matrix 🌟🌟 330. 按要求补齐数组 Patching Array 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日…

数据结构--二叉树的性质

数据结构–二叉树的性质 二叉树常考性质 常见考点1: 设非空二叉树中度为0、1和2的结点个数分别为 n 0 、 n 1 和 n 2 ,则 n 0 n 2 1 n_0、n_1和n_2,则n_0 n_2 1 n0​、n1​和n2​,则n0​n2​1 n 0 n 2 1 \color{red}n_0 n_2 1 n0​n2​…

图层中大型数据集的分块处理思路

图层中大型数据集的分块处理思路 为改善要素叠加工具(如联合和相交)的性能和可伸缩性,软件采用了称为自适应细分处理的运算逻辑。当可用的物理内存不足以对数据进行处理时,就会触发系统使用此逻辑。由于保持在物理内存的可用范围…

助力企业完成等保2.0的重要工具

在当今数字化时代,企业面临着越来越多的网络安全威胁和数据泄露风险。为了保护敏感信息和维护业务的连续性,许多企业正在积极采取措施来实施等保2.0标准。在这一过程中,EventLog Analyzer作为一种全面的安全信息与事件管理解决方案&#xff0…

swagger2word使用(将swagger2转化为word)

开源项目地址 https://github.com/JMCuixy/swagger2word 项目使用 1、项目拉下来以后先修改application.xml配置文件红框内容,将其修改为要换为自己swagger文档的地址 2、运行项目后输入地址http://127.0.0.1:8080/toWord 即可下载word文档

结构体和数据结构--共用体

共用体,也称联合(Union),是将不同类型的数据组织在一起共同占用同一段内存的一种构造数据类型。共用体与结构体的类型声明方法类似,只是关键字变为了Union。 例题:演示共用体所占内存字节数的计算方法 #i…

如何用手机制作3D人物模型素材

3D人物模型素材是现代3D游戏和电影制作中必不可少的一部分。它们是数字艺术家和设计师们用来创造逼真世界的关键。3D人物模型素材是用计算机程序制作的虚拟人物,可以被用于电影、电视、游戏和虚拟现实应用中。它们可以被用来代替实际演员,也可以被用来创…

小程序蓝牙通信

蓝牙通信能力封装 一开始是根据uniapp提供的蓝牙api写的蓝牙方法,之后发现复用性,以及一些状态的监听存在缺陷,之后整理成了类。这样复用性以及状态监听的问题就解决了。 蓝牙组件 创建蓝牙组件的类 单例模式是为了保证蓝牙长连接&#xff0…

前端(一)——前端开发遇到的普遍问题以及解决策略

😄博主:小猫娃来啦 😄文章核心:前端开发遇到的普遍问题以及解决策略 前端十万个为什么? 有人说vue框架是基于mvvm实现的?这种说法对吗? mvc和mvvm的区别是什么? mvvm是否是mvc的升…

内容文本生成二维码用excel表格导出(java)

内容文本生成二维码用excel表格导出(java) //若有问题可留言 效果如下: import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map;import org.apache.po…

大厂股权就是这么“坑”,150万股票到账前被优化,损失惨重

某网友发文称:“自己还有47天就可以解锁股权,到时就有150万的股票到账,结果接到公司裁员通知,实在是淌血,我能反抗吗?” 对这我只能说,公司卡的就是这个点。所以大家在找工作的时候,…

SparkJDBC性能优化指南

前言 本文以Mysql为例。Spark作为一种强大且广泛应用于大数据处理的分布式计算框架,有着出色的性能和可伸缩性。在使用Spark处理大规模数据时,往往需要与关系型数据库MySQL进行交互。然而,由于MySQL和Spark本身的特性之间存在一些差异,直接使用Spark读写MySQL的默认配置可…

SQL 查找重复的电子邮箱

SQL 182 查找重复的电子邮箱 SQL架构 表: Person -------------------- | Column Name | Type | -------------------- | id | int | | email | varchar | -------------------- id 是该表的主键列。 此表的每一行都包含一封电子邮件。电子邮件不包含大写字母。 编写一个 SQ…

线性DP-入门篇

目录 数字三角形: 最长上升子序列: 魔族密码: 编辑距离: 线性动态规划的主要特点是状态转移的推导是按照问题规模 从小到大依次推导,较大规模的问题的解依赖较小规模的问题的解。 数字三角形: [USA…

大模型是什么

在计算机领域,大模型’是一个近年来备受关注的词汇。这篇文章旨在带你遨游大模型的世界,了解它们的特点、优缺点,以及需如何有效地利用它们。我们还会探讨一些具体的大模型实例,并分析其对人类社会的影响。 首先,我们…

Android Studio实现内容丰富的安卓博客发布平台

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号078 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看博客列表…

@项目经理:写好简历其实只要2步,保证你offer拿到手软!

早上好,我是老原。 混职场,最重要的是什么?还是能赚到钱。 有人说,重要的是开心。这么说吧,我身边那些赚得多的,没几个不开心的。 很多人赚不到钱,归结为自己能力差,不够努力。 …