文章目录
- 前言
- 1.InnoDB 与 MyISAM 在事务和索引方面有哪些主要区别?
- 2.简述 MySQL 的事务隔离级别及其对并发问题的解决情况?
- 3.在使用 MySQL 索引时,如何避免索引失效,提高查询效率?
前言
本文围绕 MySQL面试题及答案,涵盖数据库基础概念、存储引擎、事务、索引等多方面内容。数据库范式规范数据结构,常见存储引擎各有特点,事务具备 ACID 特性,索引可提升查询效率但有优缺点。此外,还涉及 SQL 优化、大表处理、并发问题及解决等,为 MySQL 知识学习与面试准备提供全面参考。
MySQL面试题及答案下载链接https://pan.quark.cn/s/ecd5ec624c84
超详细 MySQL 8.0.41 安装教程(附安装包)https://blog.csdn.net/2501_91193507/article/details/147006634
1.InnoDB 与 MyISAM 在事务和索引方面有哪些主要区别?
- 事务方面:InnoDB 支持事务,每一条 SQL 语言默认封装成事务自动提交,这可能影响速度,适合将多条 SQL 放在 begin 和 commit 之间组成事务;MyISAM 不支持事务。
- 索引方面:InnoDB 是聚集索引,数据文件和索引绑在一起,必须有主键,辅助索引查询需先查主键再查数据,主键不宜过大;MyISAM 是非聚集索引,数据文件分离,索引保存数据文件指针,主键索引和辅助索引独立。InnoDB 不保存表的具体行数,执行select count(*)需全表扫描;MyISAM 用变量保存表行数,执行该操作速度快。此外,InnoDB 不支持全文索引,MyISAM 支持。
2.简述 MySQL 的事务隔离级别及其对并发问题的解决情况?
- READ - UNCOMMITTED(读取未提交):最低隔离级别,允许读取未提交的数据变更,会导致脏读、幻读或不可重复读。
- READ - COMMITTED(读取已提交):允许读取并发事务已提交的数据,可阻止脏读,但幻读或不可重复读仍可能发生。
- REPEATABLE - READ(可重复读):MySQL InnoDB 存储引擎的默认隔离级别,对同一字段多次读取结果一致,可阻止脏读和不可重复读,InnoDB 通过 Next - Key Lock 锁算法避免幻读。
- SERIALIZABLE(可串行化):最高隔离级别,事务依次逐个执行,可防止脏读、不可重复读以及幻读,但会影响并发性能。
3.在使用 MySQL 索引时,如何避免索引失效,提高查询效率?
- 避免在 WHERE 子句中使用!=或<>操作符,否则引擎会放弃使用索引进行全表扫描。
- 尽量不用OR连接条件,若使用会导致引擎放弃索引全表扫描,可考虑用union或union all替代(无重复数据时union all更好)。
- 避免在 WHERE 子句中对字段进行表达式或函数操作,不要在=左边进行函数、算术运算等,否则系统可能无法正确使用索引。
- 复合索引遵循最左前缀匹配原则,列类型为字符串时,查询要给值加引号,LIKE查询时%不能在前,表字段为NULL时无法使用索引。