首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

我出一道面试题,看看你能拿 3k 还是 30k!

编程知识
2024年07月30日 10:02

大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中级(15k)还是高级(30k)!

请听题:

 

题目

MySQL 数据库中的 count(1)、count(*)、count(字段)有什么区别?

 

请回答

1、它们在功能上有区别么?

A:有区别

B:没区别

 

答案

有区别。虽然在 MySQL 中,count(*)、count(1) 和 count(字段名) 都是用来 统计行数的聚合函数

但 count(*) 和 count(1) 会统计表中所有行的数量,包括 null 值(不会忽略任何一行数据);而 count(字段名) 只会统计指定字段不为 null 的行数。

恭喜答对的朋友,3k 的 offer 到手啦!

 

2、count(*) 和 count(1) 谁更快?

A:count(*)

B:count(1)

C:没区别

 

答案

效率一致,没区别。

关于 count(1) 和 count(*) 谁更快的问题,网上众说纷纭,如果背了不专业的八股文,可能答案就选错咯~

有点经验的程序员,在遇到不确定的问题时,当然要去源头亲自求证,得去看官网怎么说。如图:

官网表示 There is no performance difference ,即二者没有性能上的区别!

对于 count(字段) 的查询就是全表扫描,正常情况下它还需要判断字段是否是 null 值,因此理论上会比 count(1) 和 count(*) 慢。

但是如果字段不为 null,例如是主键或具有非空约束,那么理论上性能也差不多。而且本质上它们的统计功能不一样,在需要统计 null 的时候,只能用 count(1) 和 count(*),不需要统计 null 的时候只能用 count(字段),所以也不用太纠结性能问题。

恭喜答对的朋友,10k 的 offer 到手啦!

 

3、用 count(*) 统计有千万条记录的表的总数据量,快不快?

A:快

B:慢

C:其他

 

答案

这是一道简单的场景题,有经验的程序员,本能地会想到 具体情况具体分析

MySQL 有 2 个主流的存储引擎 MyISAM 和 InnoDB。

在 MyISAM 引擎中,有一个内部计数器来维护表的记录数,查询时可以直接返回表的行数,而无需扫描整个表,所以 count(*) 非常快。

但是在 InnoDB 引擎中无法维护记录总数,需要扫描整个表,所以表越大、记录越多,count(*) 就越慢。

为什么 InnoDB 引擎不维护记录总数呢?因为它支持行锁,会有很多并发修改表数据的操作,难以维护总数,还会带来额外的性能开销;而 MyISAM 只有表锁,对单个表的修改串行执行,所以能维护总数。所以要针对业务场景选择不同的 MySQL 引擎。

恭喜答对的朋友,15k 的 offer 到手啦!

 

4、InnoDB 引擎中,count(id) 和 count(二级索引) 哪个成本更低?

A:count(id)

B:count(二级索引)

C:其他

 

答案

count(二级索引) 通常成本更低。是不是没想到?

这是对上一问的进一步追问,虽然 InnoDB 引擎中 count(*) 统计总数性能不高,但它也针对这个操作进行了一定的优化。

id 通常是主键索引,在 InnoDB 中,主键索引是聚簇索引,它存储了实际的数据行。执行 count 时,InnoDB 需要遍历整个聚簇索引来统计行数。

二级索引是指存储了索引列和主键列的指针,而不包含实际的数据行。因此,二级索引相对来说更小。执行 count 时,InnoDB 只需要遍历这个较小的二级索引,而不是整个聚簇索引,需要读取的数据页更少,所以成本更低。

当然,理论归理论,具体情况具体分析,具体的性能差异取决于索引的大小和表的结构,可以用 explain 语句查看查询计划和成本。

恭喜答对的朋友,30k 的 offer 到手啦!

哦不对,恭喜摸到了 30k 的门槛,继续努力,说不定下一个技术专家就是你~

最后

通过这道题目可以发现,其实面试的时候,很多题目都是可以深挖的,挖的越深,越能体现出候选人的水平。

有同学表示:自己面试题目都答上来了,为啥还是通过不了?

别灰心,可能只是差点儿运气,同场面试有同学比你答的更深、表达更流畅罢了。

不管怎么样,大家在准备面试八股文的时候,有时间的话,多思考一点、再深入一点,自己也能学到很多东西。欢迎多到我们的 面试刷题神器 - 面试鸭 上看看。

你答对了几问呢?欢迎大家在评论区留言~

 

更多

💻 编程学习交流:编程导航

📃 简历快速制作:老鱼简历

✏️ 面试刷题神器:面试鸭

From:https://www.cnblogs.com/yupi/p/18331905
本文地址: http://shuzixingkong.net/article/587
0评论
提交 加载更多评论
其他文章 在Centos7中使用一键脚本安装Oracle11g
在Centos7中使用一键脚本安装Oracle11g 1. 环境准备 1.1 系统版本:Centos7.9(2009) 1.2 Oracle版本:Oracle 11g 11.2.0.4 1.3 网络需求:可以连接互联网 1.4 一键安装: curl -o oracle_install.sh http
我用Awesome-Graphs看论文:解读PowerGraph
这次向大家分享发表在OSDI 2012上的一篇经典图计算框架论文PowerGraph,旨在通过点切分解决图数据幂律分布导致的计算倾斜问题,并提出了区别于Pregel's VC(以点为中心)的GAS(以边为中心)计算框架。
我用Awesome-Graphs看论文:解读PowerGraph 我用Awesome-Graphs看论文:解读PowerGraph 我用Awesome-Graphs看论文:解读PowerGraph
LVM综合实验
实验目标 创建并管理一个 LVM 卷组 (VG)。 在卷组中创建、扩展和缩小逻辑卷 (LV)。 创建和使用快照。 实验环境 Linux 服务器 三个可用的磁盘分区: /dev/sdb1, /dev/sdb2, 和 /dev/sdb3 实验步骤 步骤 1: 安装 LVM 工具 确保 LVM 工具已安装
LVM综合实验 LVM综合实验 LVM综合实验
[SDR] GNU Radio 系列教程 —— GNU Radio TX PDU (发送数据包操作)的基础知识(超全)
目录1 PDU 概述2 Demo 详解2.1 Random PDU Generator2.2 Async CRC322.3 Protocol Formatter (Async)2.4 将 header 和 payload 合并输出2.5 对 PDU 实施突发填充和渐变2.6 RRC 滤波与多相任意重
[SDR] GNU Radio 系列教程 —— GNU Radio TX PDU (发送数据包操作)的基础知识(超全) [SDR] GNU Radio 系列教程 —— GNU Radio TX PDU (发送数据包操作)的基础知识(超全) [SDR] GNU Radio 系列教程 —— GNU Radio TX PDU (发送数据包操作)的基础知识(超全)
stable diffusion 入门教程
sd基础 工作原理&入门 输入提示词后 有文本编码器将提示词编译成特征向量,vae编码器将特征向量传入潜空间内,特征向量在潜空间内不断降噪,最后通过vae解码器将降噪之后的特征向量 解码成一个个像素组成的图片 一般选中默认vae模型 解码编码的模型 CLIP值越大,提前停止的越快,我们提示词
stable diffusion 入门教程 stable diffusion 入门教程 stable diffusion 入门教程
Zabbix 5.0 LTS 配置企业微信(Webhook)自动发送告警信息
依据前面文章《Zabbix 5.0 LTS URL 健康监测》环境,实现企业微信(Webhook)自动发送告警信息。 一、创建企业微信机器人 先在自己的企业微信群里创建一个机器人,并获取其 WebHook 地址。右击群聊天卡片,添加群机器人。 获得一个类似下图的 WebHook 地址。注意,这个 W
Zabbix 5.0 LTS 配置企业微信(Webhook)自动发送告警信息 Zabbix 5.0 LTS 配置企业微信(Webhook)自动发送告警信息 Zabbix 5.0 LTS 配置企业微信(Webhook)自动发送告警信息
《最新出炉》系列初窥篇-Python+Playwright自动化测试-58 - 文件下载
1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件。因此宏哥就接着讲解和分享一下:自动化测试下载文件。可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就是访问到下载页面,然后定位到要下载的文件的下载按钮后,点击按钮就可以了。其实不是这样的,且听宏哥徐徐
《最新出炉》系列初窥篇-Python+Playwright自动化测试-58 - 文件下载 《最新出炉》系列初窥篇-Python+Playwright自动化测试-58 - 文件下载 《最新出炉》系列初窥篇-Python+Playwright自动化测试-58 - 文件下载
[HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding
0 引言 在近期项目一场景中,一 Web API (响应内容:7MB - 40MB、数据项:5W-20W条)的网络传输耗时较大,短则 5s,长则高达25s,前端渲染又需要耗时 9s-60s。 在这个场景中,前端的问题暂且不表。那么针对后端的问题,个人认为还是有较大的优化空间: 1)启用HTTP 内容
[HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding [HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding [HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding