MySQL数据库面试题目_进阶实践
MySQL数据库引擎
1、InnoDB
特点:支持事务,具有提交回滚功能,支持外键,自动增长列,并发能力强。
优点:支持事务,并发能力强,支持外键。
缺点:执行速度相对MYISAM较慢,占用空间较大。
适用场景:业务复杂的系统,如银行转账、崩溃时需要回滚的场景。
2、MYISAM
特点:全表锁。
优点:执行速度快,占用空间小。
缺点:不支持事务,不支持外键,并发性能差。
适用场景:主要依赖Select、Insert的业务中。
3、Memory
特点:全表锁。
优点:存储在内存中,执行速度快,默认使用HASH索引检索数据。
缺点:数据安全性低,容易丢失,不适用范围查询。
适用场景变化不繁琐的代码表。
4、MERGE
特点:是一组MYISAM表的组合。
优点:可以将多个MyISAM表组合成一个逻辑表进行操作。
缺点:不支持事务和外键。
适用场景:用于将多个MyISAM表的逻辑集合处理。
数据库三大范式
1、第一范式(1NF)
作用:确保每列的原子性,即每个列不可再分。
举例说明:例如客户信息表中,不能将地址列分为省、市、区等单独列,应合并为一个地址列。
2、第二范式(2NF)
作用:确保每个非主键列完全依赖于主键。
举例说明:例如商品订单表中,订单ID为主键,商品ID和数量作为非主键列,它们应该依赖于订单ID而不是部分依赖。
3、第三范式(3NF)
作用:确保非主键列之间不存在传递依赖关系。
举例说明:例如学生表中,学号是主键,姓名和班级名称作为非主键列,班级名称不应依赖于学生的姓名或其他非主键列。
聚集索引与非聚集索引
特征 | 聚集索引 | 非聚集索引 |
索引结构 | 索引与数据在一起存储,叶子节点包含数据 | 索引与数据分离存储,叶子节点包含指向数据的指针 |
检索效率 | 检索效率高,因为索引本身有序 | 检索效率相对较低,需要二次查找 |
适用场景 | 适用于范围查询,排序操作 | 适用于等值查询,单条记录查找 |
InnoDB与MYISAM的区别
特性 | InnoDB | MYISAM |
事务支持 | 支持 | 不支持 |
外键支持 | 支持 | 不支持 |
锁机制 | 行级锁 | 表级锁 |
并发性能 | 高 | 低 |
适用场景 | 复杂业务系统 | 简单读操作多的场景 |
常见SQL优化方法
1、加索引:对经常查询的字段建立索引,提高查询速度。
2、避免返回不必要的数据:只查询需要的字段,避免使用SELECT
。
3、适当分批量进行:对于大数据量的插入、更新操作,可以分批次进行,减少对数据库的压力。
4、优化SQL结构:避免复杂的子查询,使用JOIN代替;尽量使用简单的比较运算符等。
分库与分表设计
1、水平分库:以字段为依据,按照一定策略将一个库中的数据拆分到多个库中。
2、水平分表:以字段为依据,按照一定策略将一个表中的数据拆分到多个表中。
3、垂直分库:以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。
4、垂直分表:以字段的活跃性为依据,将表中字段拆到不同的表(主表和扩展表)中。
FAQs
问题1: 什么是事务?事务的四大特性是什么?
回答:事务是指一组操作要么全部完成,要么全部不完成的不可分割的工作单元,它的四大特性包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),原子性保证事务要么全部完成,要么全部回滚;一致性保证数据库状态始终满足业务规则;隔离性保证并发事务互不干扰;持久性保证一旦事务提交,其效果将永久保存在数据库中。
问题2: 如何排查并解决MySQL中的死锁问题?
回答:排查死锁问题的步骤如下:
1、查看死锁日志:通过命令SHOW ENGINE INNODB STATUS;
获取Innodb的状态信息。
2、找出死锁SQL:在日志中定位产生死锁的SQL语句。
3、分析加锁情况:确定哪些事务持有锁,哪些事务在请求锁。
4、模拟死锁案发:重现产生死锁的操作步骤。
5、分析死锁结果:了解哪些事务被回滚或等待。
解决死锁问题的方法包括:
1、优化事务:减少事务中的操作,尽量缩短持锁时间。
2、调整索引:为频繁查询和更新的字段添加索引,减少锁竞争。
3、调整隔离级别:根据实际需求选择合适的隔离级别,避免过高的隔离级别导致死锁。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1226939.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复