程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

MySQL 8性能调优面试题总结(mysql性能测试瓶颈及调优)

balukai 2025-05-09 17:02:30 文章精选 7 ℃

MySQL 8 性能调优是面试中的高频考点,以下是常见的面试题及核心要点总结,帮助你快速掌握关键知识:


一、索引优化

  1. 如何判断索引是否失效?

O 失效场景:违反最左前缀原则、对索引列进行计算或函数操作、使用LIKE '%xxx'、类型隐式转换、OR 条件未全覆盖索引、优化器判断全表更快(数据量小)。

O 排查工具EXPLAIN查看keytype字段,possible_keys为空表示索引未被使用。

  1. MySQL 8 新增的索引类型?

O 隐藏索引(Invisible Index):可标记索引为“隐藏”进行测试,避免直接删除风险。

O 降序索引:支持索引列的降序排序,优化ORDER BY column DESC场景。

  1. 如何优化联合索引的查询效率?

O 确保查询条件遵循最左前缀原则,高频查询字段放在左侧,区分度高的列优先。


二、查询优化

  1. 如何分析慢查询?

O 步骤:启用慢查询日志(slow_query_log=1),使用EXPLAINEXPLAIN ANALYZE(MySQL 8 支持)分析执行计划,关注rows(扫描行数)、Extra(是否使用临时表/文件排序)等字段。

O 工具pt-query-digest分析慢日志,SHOW PROFILE查看资源消耗细节。

  1. 深分页(LIMIT 100000,10)如何优化?

O 问题OFFSET过大会导致大量无用扫描。

O 方案:改用WHERE id > last_id LIMIT 10(基于有序主键或索引),或使用覆盖索引减少回表。

  1. 大表JOIN的性能问题如何解决?

O 确保JOIN字段有索引,避免笛卡尔积,小表作为驱动表。若数据量极大,考虑分库分表或冗余字段。


三、配置调优

  1. InnoDB缓冲池(Buffer Pool)如何配置?

O 原则:通常设为物理内存的70%~80%(innodb_buffer_pool_size),避免频繁磁盘IO。

O MySQL 8 改进:支持在线调整缓冲池大小,无需重启实例。

  1. 事务日志(Redo Log)优化

O 增大innodb_log_file_size以减少日志切换频率,但需平衡恢复时间。

O MySQL 8 支持动态修改innodb_redo_log_capacity调整日志文件大小和数量。

  1. 如何避免锁竞争?

O 使用行级锁(默认),缩短事务时间,避免长事务。监控SHOW ENGINE INNODB STATUS中的锁信息。


四、高级特性与架构

  1. CTE(公共表表达式)优化

O MySQL 8 支持WITH子句实现递归查询或复杂子查询的简化,优化器可自动优化执行路径。

  1. 分库分表方案选择

O 垂直拆分(按业务模块) vs 水平拆分(按数据范围或哈希)。工具可选ShardingSphere、Vitess等。

  1. 如何利用读写分离提升性能?

O 主库处理写操作,从库处理读请求。通过MySQL Router或中间件(如ProxySQL)自动路由。


五、高频面试题

  1. MySQL 8 默认存储引擎是什么?

O InnoDB,支持事务、行级锁、外键约束,适合高并发场景。

  1. 什么是覆盖索引?

O 索引包含查询所需的所有字段,无需回表,显著提升查询速度。

  1. 如何避免死锁?

O 按固定顺序访问资源,降低事务粒度,设置合理的超时时间(innodb_lock_wait_timeout)。


附:调优工具速查

  • 诊断工具
    EXPLAINSHOW PROFILEPerformance Schemasys Schema(内置性能视图)。
  • 监控工具
    Prometheus + Grafana、Percona Monitoring and Management (PMM)。

掌握这些核心知识点,结合实际场景分析,能够系统回答MySQL 8性能调优相关问题。建议结合具体案例(如索引失效、死锁排查)加深理解。

最近发表
标签列表