几个简单的Mysql面试题(第一人称口吻)大家春招顺利呀

1 什么是反范式

数据库设计的三大范式指的是:

  • 1NF:字段不可再分
  • 2NF:所有的非主属性完全依赖主键
  • 3NF:所有非主属性不存在传递依赖主键的情况

硬编码

2 如何避免Mysql死锁

  • 尽量使用主键更新数据,防止使用非聚簇索引回表时和使用聚簇索引冲突造成死锁。
  • 在允许幻读和不可重复度的情况下,尽量使用RC的隔离级别,避免gap lock造成的死锁。
  • 避免长事务,将事务拆解
  • 设置锁超时等待innodb_lock_wait_timeout

3 执行一条Sql的过程

对于一条sql的执行主要分为以下几个步骤:

  • 连接器(建立客户端和服务端的连接)

  • 查询缓存(是k-v结构的缓存,k的话就是sql语句,如果出现ddl则会删除缓存,所以这个缓存是很鸡肋的,在mysq后面的版本中也随之删除了)

  • Sql解析(sql解析主要分为俩个过程,分别是词法分析和语法分析,词法分析是将关键词提取出来,语法分析是构建一棵语法树)

  • 执行SQL(分为三个阶段:)

  • 预处理(会将*解析成列名,判断所查的表或者列是否存在,不存在的话在这一步就会直接报错)

  • 优化器(这一步其实和我们平时用explain所看到的很一致的,所要决定的就是要不要走索引,走哪个索引,去做出一个判断)

  • 执行器

4 那你了解explain的结果都有什么含义吗?

一定要看

5 有哪些优化索引的方法?

  • 前缀索引优化

  • 覆盖索引

  • 主键自增(B+树的节点是按照主键排序的,如果自增的话新增不需要挪动节点)

  • 索引列设置为NOT NULL

  • 索引列存在NULL,会使优化器的操作变得更复杂

  • 对索引进行统计时,NULL会被忽略

  • NULL虽然没意义,但是会占用空间,

img

**⚠️****注意:**Mysql的列存储分为俩部分,一部分是额外信息,一部分是真实数据。额外信息包含:变长字段、NULL值列表、头信息。

变长字段:按照列的逆序存放变长字段的字节值

NULL值列表:逆序每一个为1的位代表对应位置为NULL

头信息:delete_mask、next_record、record_type

delete_mask标记为1则代表删除,后面又符合条件的数据可以覆盖,也可以通过optimise table进行数据表重建,实现真实清空。

  • 防止索引失效

6 表空间文件的结构是怎么样的?

表空间由段(segment)、区(extent)、页(page)、行(row)组成

img

7 Innodb和myisam的区别

MysQL5.5之前的默认存储引擎是MylSAM,5.5之后改为了InnoDB。首先对于InnoDB存储引擎,提供了良好的事务管理、崩溃修复能力和并发控制。因为InnoDB存储引擎支持事务,所以对于要求事务完整性的场合需要选择InnoDB,比如数据操作除了插入和查询以外还包含有很多更新、删除操作,像财务系统等对数据准确性要求较高的系统.缺点是其读写效率稍差,占用的数据空间相对比较大.其次对于MylSAM存储引擎,如果是小型应用,系统以读操作和插入操作为主,只有很少的更新、删除操作,并且对事务的要求没有那么高,则可以选择这个存储引擎.Mylsam存储引擎的优势在于占用空间小,处理速度快;缺点是不支持事务的完整性和并发性.这两种引擎各有特点,当然你也可以在mysql中,针对不同的数据表,可以选择不同的存储引擎.

MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM 不支持事务、行级锁、外键 ,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沈自在-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值