mysql高频面试题合集

目录

1.请你谈谈 MySQL 事务隔离级别,MySQL 的默认隔离级别是什么?

为了达到事务的四大特性,数据库定义了 4 种不同的事务隔离级别:

  • READ-UNCOMMITTED(读取未提交):最低的隔离级别,允许脏读,也就是可能读取 到其他会话中未提交事务修改的数据,可能会导致脏读、幻读或不可重复读。
  • READ-COMMITTED(读取已提交): 只能读取到已经提交的数据。Oracle 等多数数 据库默认都是该级别 (不重复读),可以阻止脏读,但是幻读或不可重复读仍有可能发 生。
  • REPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据 是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • SERIALIZABLE(可串行化):最高的隔离级别,完全服从 ACID 的隔离级别。所有的 事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏 读、不可重复读以及幻读。
  • MySQL 默认采用的 REPEATABLE_READ 隔离级别。

2、可重复读解决了哪些问题?

  • 可重复读的核心就是一致性读(consistent read);保证多次读取同一个数据时,其值都和事 务开始时候的内容是一致,禁止读取到别的事务未提交的数据,会造成幻读。
  • 而事务更新数据的时候,只能用当前读。如果当前的记录的行锁被其他事务占用的话,就 需要进入锁等待。
  • 查询只承认在事务启动前就已经提交完成的数据。
  • 可重复读解决的是重复读的问题,可重复读在快照读的情况下是不会有幻读,但当前读的 时候会有幻读。

3、对 SQL 慢查询会考虑哪些优化 ?

 分析语句,是否加载了不必要的字段/数据。
 分析 SQL 执行计划(expl索引信息)。
 如果 SQL 很复杂,优化 SQL 结构。
 按照可能的优化点执行表结构变更、增加索引、SQL 改写等操作。
 查看优化后的执行时间和执行计划。
 如果表数据量太大,考虑分表。
 利用缓存,减少查询次数

4、MySQL 为什么 InnoDB 是默认引擎?

聚簇索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一 个聚簇索引,因为一个表的物理顺序只有一种情况,所以,对应的聚簇索引只能有一个。聚簇 索引的叶子节点就是数据节点,既存储索引值,又在叶子节点存储行数据。 Innodb 创建表后生成的文件有: frm:创建表的语句 idb:表里面的数据+索引文件

5、MySQL 索引底层结构为什么使用 B+树?

  • B+树的所有叶节点可以通过指针相互连接,能够减 少顺序遍历时产生的额外随机 I/O;
  • B 树一个节点里存的是数据,而 B+树存储的是索引(地址),所以 B 树里一个节 点存不了很多个数据,但是 B+树一个节点能存很多索引,B+树叶子节点存所有的数据。
  • B+树叶子节点是一个双向链表的数据结构,便于范围查找。

6、B+ 树的叶子节点链表是单向还是双向?

双向链表

7、如何查询慢 SQL 产生的原因

 分析 SQL 执行计划(explain extended),思考可能的优化点,是否命中索引等。
 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)。
 内存不足。
 网络速度慢。
 是否查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。
 是否返回了不必要的行和列。
 锁或者死锁。
 I/O 吞吐量小,形成了瓶颈效应。
 sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。

8、索引失效的情况有哪些?

 like 以%开头索引无效,当 like 以&结尾,索引有效。
 or 语句前后没有同时使用索引,当且仅当 or 语句查询条件的前后列均为索引时,索引生效。
 组合索引,使用的不是第一列索引时候,索引失效,即最左匹配规则。
 数据类型出现隐式转换,如 varchar 不加单引号的时候可能会自动转换为 int 类型,这 个时候索引失效。
 在索引列上使用 IS NULL 或者 IS NOT NULL 时候,索引失效,因为索引是不索引空值的。
 在索引字段上使用,NOT、 <>、!= 、时候是不会使用索引的,对于这样的处理只会进行全表扫描。
 对索引字段进行计算操作,函数操作时不会使用索引。
 当全表扫描速度比索引速度快的时候不会使用索引。

9、MySQL 事务的特性有什么,说一下分别是什么意思?

 原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。
 一致性或可串性:事务的执行使得数据库从一种正确状态转换成另一种正确状态。
 隔离性:在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务。
 持久性:事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值