MySQL经典面试题25道

preview
需积分: 0 0 下载量 143 浏览量 更新于2023-05-22 收藏 29KB DOCX 举报
MySQL是世界上最受欢迎的关系型数据库管理系统之一,面试中经常会出现一系列关于MySQL的问题,旨在评估候选人的技术熟练程度。以下是一些常见的MySQL面试题及其详细解答: 1. NOW()和CURRENT_DATE()的区别: NOW()返回当前的日期和时间,包括小时、分钟和秒,而CURRENT_DATE()仅提供当前日期,不包含时间部分。 2. CHAR和VARCHAR的区别: CHAR是定长字符串类型,存储时会用空格填充到指定长度,检索时会去掉尾随空格。VARCHAR是变长字符串,只存储实际字符长度,更节省空间。 3. 主键索引与唯一索引的区别: - 主键是一种约束,确保数据的唯一性和完整性,不能为空,且一个表只能有一个主键。 - 唯一索引是索引类型,确保数据唯一,但可以接受NULL值,可以有多个唯一索引。 4. MySQL中的不同表格类型: - MyISAM:非事务处理,速度快,占用空间少,但不支持行级锁定。 - Heap(MEMORY):数据存储在内存中,速度快,但数据重启后丢失。 - Merge:用于合并多个MyISAM表。 - InnoDB:支持事务处理,行级锁定,更安全。 - ISAM:旧的存储引擎,不常用。 5. SQL的生命周期: - 建立连接,接收SQL请求。 - 解析SQL,生成执行计划。 - 执行查询,读取数据并处理。 - 将结果发送给客户端。 - 关闭连接,释放资源。 6. 查看表的索引: 使用`SHOW INDEX FROM <tablename>;`命令可以查看表的所有索引。 7. 为何数据库使用B+树而非B树: - B+树更适合顺序和随机检索,且I/O操作更少,因为所有数据都在叶子节点。 - B+树的内部节点只用作索引,叶子节点之间通过指针链接,方便遍历。 - B+树的查询效率更稳定,所有关键字的查找路径相同。 - B+树更适合范围查询和元素遍历。 8. 数据库三大范式: - 第一范式:数据不可分,列不可再细分。 - 第二范式:非主键列完全依赖于主键,消除部分函数依赖。 - 第三范式:非主键列只依赖主键,消除传递依赖。 9. SQL查询优化方法: - 避免全表扫描,为查询列创建索引。 - 避免在WHERE子句中使用*号,使用全大写的SQL。 - 避免在WHERE子句中使用IS NULL和OR。 - 使用IN和NOT IN时要谨慎,可能触发全表扫描。 - 利用覆盖索引减少回表操作。 10. 覆盖索引和回表: - 覆盖索引:查询列完全由索引覆盖,不需要回表到原始数据行获取数据。 - 回表:当二级索引不足以提供所需数据时,需要回溯到聚簇索引获取完整信息。 11. MySQL CPU飙升的处理: - 使用top或htop找出问题进程。 - 查看show processlist找出慢查询。 - 分析查询语句,优化SQL。 - 检查硬件资源,如内存和磁盘I/O。 - 考虑调整MySQL配置参数或分摊数据库负载。 以上是对MySQL面试题的详细解答,涵盖了数据库的基础知识、查询优化、索引原理、存储引擎、数据模型以及性能调优等多个方面。这些知识点对于理解MySQL的工作机制和日常运维至关重要。