Java实习生------MySQL10道面试题打卡

今日语录:“如果一个人一辈子只有一次翻身的机会,那就应该用尽全力才对”🌹

参考资料:图解MySQL 、MySQL面试题

1、MySQL的架构你了解吗?

MySQL分为server层和存储引擎层。

  • server层:负责建立连接、分析SQL以及执行SQL,包括了连接器、解析器、预处理器、优化器、执行器,还包括了所有的内置函数(日期函数等)以及跨存储引擎层的功能(视图等)。
  • 存储引擎层:负责数据的存储以及提取。最常见的就是innoDB存储引擎。

2、执行一条select语句期间,发生了什么?⭐

建立连接:

  • 如果在Linux下来操作,那么需要先和服务器基于TCP三次握手来建立连接,然后服务器验证用户名和密码,如果用户名和密码都正确,那么服务器会获取该用户所对应的权限,以后该用户所有的操作都是基于所拥有的权限来完成的。

查询缓存:

  • 如果是查询语句,需要先到缓存中去查询数据,如果缓存命中,那么直接返回给客户端;未命中的话再继续往下执行

解析:

  • 解析器主要做两件事情,对语句进行词法分析和语法分析。
  • 词法分析:识别出语句中的关键字。
  • 语法分析:检查该语句是否满足MySQL的语法要求。

预处理:

  • 预处理器:检查语句中的表或者字段是否存在;将*扩展为所有列的列名
  • 优化器:比如有多个索引,那么优化器会基于查询成本来选择成本最低的那个索引。
  • 执行器:与存储引擎层进行交互,提取数据并返回给客户端。

3、数据库的三范式是什么?

  • 第一范式:关系中的每一个分量不可再分。
  • 第二范式:在第一范式的基础上,消除非主属性对键的传递依赖。
  • 第三范式:在第二范式的基础上,消除非主属性对键的部份依赖。

4、什么是索引?索引有哪些分类?⭐

索引是帮助存储引擎快速获取数据的一种数据结构,相当于书的目录。

按照数据结构、物理存储、字段特性以及字段个数,索引可分为四类。

数据结构:

  • B+树索引,哈希索引,full-text索引

物理存储:

  • 主键索引:聚簇索引的叶子节点存放的是一条条实际数据
  • 二级索引:其叶子节点存放的是主键值

在使用索引查询时,如果使用的是二级索引,且查询的数据在二级索引中能够查询到,那么就不需要回表,这个过程叫做索引覆盖;如果查询的数据再二级索引中查询不到,那么需要根据主键值再使用主键索引来进行查询,这个过程叫做回表。

字段特性:

  • 主键索引:建立在主键字段上的索引
  • 普通索引:建立在普通字段上的索引

字段个数:

  • 联合索引:建立在多个列上的索引
  • 单列索引:建立在单个列上的索引

5、什么时候需要/不需要创建索引?

需要:

  • 字段有唯一性限制的,比如商品的编码
  • 经常用于where查询的字段
  • 经常用于group by和order by的字段

不需要:

  • 字段中存在大量重复数据时
  • 表中数据太少时
  • 经常更新的字段

6、谈谈你对B+树的理解,和B树有什么区别?⭐

  • B+树的叶子节点存放实际的数据,非叶子节点只存放索引
  • B+树的叶子节点之间串成了一个有序链表

和B树的区别:

  • 查询效率:B+树的非叶子节点只存放索引,B树的非叶子节点存放的是实际的数据,因此在数据存放量相同的情况下,B+树的层数会更少,也就意味磁盘I/O次数更少,查询效率更高
  • 插入和删除效率:B+树有很多冗余节点,在进行插入和删除时基本上不影响非叶子节点;而B树没有那么多冗余节点,在进行插入和删除的时候有可能会导致树的复杂变化
  • 范围查询:B+树的叶子节点之间构成了有序链表,这种设计对于范围查询很有帮助,而B树没有这种结构

7、索引失效的原因有哪些?⭐

  • 对索引使用左或者左右模糊匹配
  • 对索引使用函数
  • 对索引使用表达式计算
  • 建立的索引是字符串类型,输入参数是整型
  • 联合索引未遵循最左匹配原则
  • where子句中,or之前的列时索引列,or之后的不是

8、查询时,如何优化查询性能?

  • 只返回必要的列:尽量避免使用 select *
  • 只返回必要的行:使用 limit 来限制查询的行数
  • 对经常查询的数据做缓存

9、innoDB和MyISAM的区别?

  • 前者支持事务,后者不支持
  • 对于count函数,前者在执行的时候会逐行扫描来进行统计;后者则会记录一个行数值,在查询的时候,直接将这个值返回
  • 前者支持外键,后者不支持
  • 前者支持行锁和表锁,后者仅支持行锁

10、谈谈你对水平切分和垂直切分的理解?

  • 水平切分:是将一个表中的数据拆分到多个结构相同的表中,当表中数据太多的时候可以使用水平切分
  • 垂直切分:将一个表中的列切分到不同的表中,切分的时候可以按照关系的密集程度切分,也可以把经常使用的列和不经常使用的列切分到不同表中

 

 “后来雨声学会了弹钢琴,在黑夜诉说着,你不是一个人”   加油!

整理面经不易,小伙伴们点个赞吧~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
mysql-connector-javaMySQL数据库官方提供的用于Java开发的驱动程序。它提供了与MySQL数据库进行连接、查询、更新和管理等功能的API。通过使用mysql-connector-java,开发者可以在Java程序中方便地对MySQL数据库进行操作。 mysql-connector-java的主要功能包括连接管理、数据查询、事务处理和异常处理等。它提供了连接池技术,可以有效地管理多个数据库连接,提高数据库操作的性能和并发能力。通过mysql-connector-java,开发者可以方便地进行SQL语句的编写和执行,可以执行查询、更新、插入和删除等操作。同时,它支持事务处理,可以保证数据操作的原子性、一致性、隔离性和持久性。在进行数据库操作时,也可以通过mysql-connector-java对异常进行捕获和处理,保证程序的稳定性和可靠性。 对于开发者来说,使用mysql-connector-java的好处是显而易见的。首先,它是官方提供的驱动程序,具有稳定性和可靠性。其次,它提供了丰富的API,可以满足大部分数据库操作的需求。再次,它支持连接池技术和事务处理,可以提高程序的性能和可扩展性。此外,mysql-connector-java还提供了一些额外的功能,如SSL加密、压缩和回滚等,可以根据具体需求进行配置和使用。 总之,mysql-connector-javaJava开发中常用的数据库驱动程序之一。通过使用它,开发者可以方便地与MySQL数据库进行交互,实现各种数据库操作。无论是开发小型应用还是大型系统,mysql-connector-java都是一款值得推荐的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值