MySQL面试深度解析:索引、事务与性能优化

需积分: 0 0 下载量 70 浏览量 更新于2024-08-04 收藏 34KB MD 举报
本文档包含了一系列关于MySQL的面试题目及其答案,涵盖了数据库的基础知识、索引、事务处理、存储引擎、数据表设计、性能优化等方面。特别强调了MyISAM和InnoDB存储引擎的区别,以及它们在索引实现上的差异。 1. **MyISAM和InnoDB的索引差异** - MyISAM使用非聚集索引,索引的叶节点存储数据记录的地址,数据和索引分开存储。 - InnoDB使用聚集索引,叶节点直接存储数据记录,主键索引的叶节点包含完整数据,辅助索引需通过主键再次查找。 2. **InnoDB的自增ID作为主键** - InnoDB要求有主键,若无显式定义,系统会选择唯一标识列作为主键,若不存在,则自动生成自增ID,确保数据有序并优化索引效率。 3. **事务的四大特性(ACID)** - 原子性(Atomicity):事务的所有操作要么全部完成,要么全部不完成。 - 一致性(Consistency):事务完成后,数据库应处于一致状态。 - 隔离性(Isolation):并发事务之间互不影响,如同顺序执行。 - 持久性(Durability):一旦事务提交,其结果将永久保存。 4. **事务并发与隔离级别** - 事务隔离级别包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。 - 不同级别会引发脏读、不可重复读、幻读等问题,MySQL默认为可重复读。 5. **MySQL存储引擎InnoDB与MyISAM的区别** - InnoDB支持事务处理,MyISAM不支持。 - InnoDB使用行级锁定,MyISAM使用表级锁定。 - InnoDB支持外键,MyISAM不支持。 6. **数据库三范式** - 第一范式(1NF):消除部分函数依赖。 - 第二范式(2NF):在1NF基础上消除非主属性对候选键的部分函数依赖。 - 第三范式(3NF):在2NF基础上消除非主属性之间的传递函数依赖。 - 设计符合三范式的表可以减少数据冗余,但可能导致查询复杂。 7. **MySQL索引优化** - 注意避免全表扫描,合理创建索引,尤其是对WHERE子句中频繁出现的列。 - 使用覆盖索引,减少回表操作。 - 避免在索引列上使用计算或函数。 8. **CHAR和VARCHAR的区别** - CHAR预定义长度,存储空间固定,适合长度一致的数据。 - VARCHAR动态分配空间,节省存储,适合长度变化的数据。 9. **视图和游标** - 视图是虚拟表,基于查询结果,提供了一种简化查询的方式。 - 游标允许程序逐行处理查询结果。 10. **存储过程** - 存储过程是一组预编译的SQL语句,可提高执行效率,减少网络传输。 - 通过SQL语句调用存储过程,如`CALL procedure_name()`。 这些面试题涉及了MySQL数据库的多个核心概念,是理解MySQL数据库系统和提升数据库管理技能的关键。