首页 > 其他分享 >我出一道面试题,看看你能拿 3k 还是 30k!

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

时间:2024-07-30 11:08:14浏览次数:12  
标签:count 面试题 面试 我出 3k 索引 30k InnoDB null

大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 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 的门槛,继续努力,说不定下一个技术专家就是你~

最后

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

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

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

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

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

 

更多

标签:count,面试题,面试,我出,3k,索引,30k,InnoDB,null
From: https://www.cnblogs.com/yupi/p/18331905

相关文章

  • 大模型算法岗常见面试题100道(值得收藏)
    大模型应该是目前当之无愧的最有影响力的AI技术,它正在革新各个行业,包括自然语言处理、机器翻译、内容创作和客户服务等等,正在成为未来商业环境的重要组成部分。截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来......
  • Java面试题(容器)
    目录1、Java容器都有哪些?2、 Collection和Collections有什么区别3、List、Set、Map之间的区别是什么?4、 HashMap和Hashtable有什么区别?5、如何决定使用HashMap还是TreeMap?6、 说一下HashMap的实现原理?7、 ArrayList和LinkedList的区别是什么?8、 ......
  • CSDN最新JAVA面试题集
    第一章-Java基础篇1、你是怎样理解OOP面向对象   难度系数:⭐面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征:继承:继承是从已有类得到继承信息创建新类的过程封装:封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口多态性:多态性是指允......
  • Java面试题大全(四)
    91.Java开发设计七大原则在Java编程中,有一些基本的设计原则和模式,被广泛接受为最佳实践。以下是七个主要的Java开发原则:单一职责原则(SRP)一个类应该只有一个引起它变化的原因。开放-封闭原则(OCP)类应该是可扩展的,但是不可修改。李氏替换原则(LSP)子类型必须能够替换掉它们......
  • 70%的人都答错了的面试题,vue3的ref是如何实现响应式的?
    前言最近在我的vue源码交流群有位面试官分享了一道他的面试题:vue3的ref是如何实现响应式的?下面有不少小伙伴回答的是Proxy,其实这些小伙伴只回答对了一半。当ref接收的是一个对象时确实是依靠Proxy去实现响应式的。但是ref还可以接收 string、number 或 boolean 这样的......
  • 全网最全最新100道C++面试题:20-40
    前述:本文初衷是为了总结本人在各大平台看到的C++面经,我会在本文持续更新我所遇到的一些C++面试问题,如有错误请一定指正我。新建立了一个收集问答的仓库,欢迎各位小伙伴来更新鸭interview_experience:本仓库初衷是想为大家提供一个便利,全面,准确的面试题学习场地,大家都可以对仓库......
  • 会员购项目面试题解析:高效数据抓取与异常处理
    会员购项目亮点日志记录信息协程异步抓取数据,大大提高抓取速度捕获异常,并添加重试机制源码importloggingimporttimeimportrequestsimportasyncioimportaiohttpfromaiohttpimportContentTypeErrorimportcsv#配置日志logging.basicConfig(level=logging......
  • Java常见面试题
    1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,Java开发工具包,提供了Java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,Java运行环境,为Java的运行提供了所需环境。具体来说JDK其实包含了JRE,同时还包含了编译Java源码的编译器Javac,还包含......
  • 2024年大厂AI大模型面试题精编+答案解析!!
    前言随着AI市场,人工智能的爆火,在接下来的金九银十招聘高峰期,各大科技巨头和国有企业将会对AGI人才的争夺展开一场大战,为求职市场注入了新的活力。为了助力求职者在面试中展现最佳状态,深入理解行业巨头的选拔标准变得至关重要。尤其是对于AGI(ArtificialGeneralIntelligen......
  • 场景面试题
    线上redis机器爆了如何优化利用MEMORYUSAGE查看各个键值对的内存使用情况,找出占用大量内存的键,并根据业务需求决定是否需要删除或者优化其存储方式设置数据过期策略,为那些不需要长期保存的数据设置合理的过期时间,让redis自动删除过期的数据,释放内存增加机器内存,可以增加redi......