MySQL 8.0 特性的高频面试题及核心知识点

发布于:2025-03-21 ⋅ 阅读:(34) ⋅ 点赞:(0)

1. 索引原理与 MySQL 8.0 新特性

  • 答案

    • 自适应哈希索引:MySQL 8.0 自动在频繁查询的索引上构建哈希索引,加速等值查询(如 WHERE id=1)。
    • 全文索引优化:支持布尔模式(MATCH() AGAINST())和自然语言模式,且索引更新更高效。
    • InnoDB 页压缩:支持 ZSTD 压缩算法,减少存储空间和 I/O 开销。
    • 虚拟列索引:可对虚拟列(Computed Columns)创建索引,减少存储冗余。

2. 事务隔离级别与 MySQL 8.0 的新特性

  • 答案

    • 默认隔离级别:MySQL 8.0 仍默认 Repeatable Read,但引入了 READ COMMITTED 的优化(如 Next-Key Lock 的改进)。
    • 锁机制增强:支持 SKIP LOCKED 和 NOWAIT,在 SELECT ... FOR UPDATE 中快速跳过锁定的行或直接报错。
    • 分布式事务:结合 Group Replication,支持多节点事务一致性。

3. InnoDB 新特性

  • 答案

    • 动态数据字典:MySQL 8.0 的系统表存储在 InnoDB 中,支持在线 DDL(如 ALTER TABLE)。
    • 并行查询innodb_parallel_read_threads 优化多核 CPU 的利用,提升大表查询性能。
    • 在线分区操作:支持 ALTER TABLE ... REORGANIZE PARTITION 在线操作,减少锁时间。

4. JSON 类型与函数

  • 答案

    • JSON 支持增强

      • 新增函数:JSON_TABLE(将 JSON 转为关系表)、JSON_VALUEJSON_ARRAYAGG
      • 支持路径表达式:如 $.store.book[0].title
    • 查询优化:JSON 索引支持 FUNCTIONAL 索引,加速 JSON 路径查询。


5. 窗口函数(Window Functions)

  • 答案

    • 新增功能:MySQL 8.0 引入窗口函数,如 ROW_NUMBER()RANK()SUM() OVER (...),无需自连接即可实现复杂计算。

    • 使用场景:排名、滑动聚合、分组内排序。

    • 示例

      SELECT 
          id, 
          sales, 
          ROW_NUMBER() OVER (PARTITION BY region ORDER BY sales DESC) AS rank 
      FROM sales_data;
      

6. CTE(公用表表达式)

  • 答案

    • 新增语法:支持 WITH 子句,简化复杂查询(如递归查询)。

    • 示例:实现树形结构查询:

      WITH RECURSIVE category_tree AS (
          SELECT * FROM categories WHERE parent_id IS NULL
          UNION ALL
          SELECT c.* FROM categories c 
          INNER JOIN category_tree ct ON c.parent_id = ct.id
      )
      SELECT * FROM category_tree;
      

7. 默认认证插件

  • 答案

    • 变化点:MySQL 8.0 默认认证插件从 mysql_native_password 改为 caching_sha2_password,需注意客户端兼容性。

    • 解决方法:若连接报错,可临时改回旧插件:

      ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
      

8. 临时表优化

  • 答案

    • 内存临时表:MySQL 8.0 默认允许在内存中创建临时表(tmp_table_size 控制),提升性能。
    • 哈希临时表:对 GROUP BY 和 DISTINCT 查询优化,减少磁盘 I/O。

9. 分区表增强

  • 答案

    • 分区类型扩展:支持 LINEAR KEY 和 LINEAR HASH 分区,分布更均匀。
    • 子分区:允许对分区进一步子分区(如 RANGE 分区 + HASH 子分区)。
    • 分区修剪优化:查询时自动跳过无关分区,加速范围查询。

10. 原子 DDL(Online DDL)

  • 答案

    • 在线操作:大多数 ALTER TABLE 操作(如 ADD COLUMNDROP INDEX)支持在线执行,无需锁表。
    • 新特性REORGANIZE PARTITION 和 REBUILD PARTITION 支持在线分区重组。
    • 工具pt-online-schema-change 与 MySQL 8.0 兼容性更好。

11. 性能监控与优化

  • 答案

    • Performance Schema:新增 memory_summary_by_host_by_event_name 等表,监控内存使用。
    • Explain 新增字段PARTITION 显示查询扫描的分区,possible_keys 支持更精准的索引建议。

12. 窗口函数与慢查询优化

  • 答案

    • 用窗口函数替代子查询:减少嵌套查询的性能开销。

    • 示例:计算每行的累计销售额:

      SELECT 
          date, 
          sales, 
          SUM(sales) OVER (ORDER BY date) AS cumulative_sales 
      FROM sales;
      

13. 分布式事务与 Group Replication

  • 答案

    • Group Replication 2.1:MySQL 8.0 引入更高效的冲突检测和自动修复机制。
    • 多主模式:支持多节点同时写入,提升高可用性。

14. 全局事务标识符(GTID)

  • 答案

    • 默认启用:MySQL 8.0 默认开启 GTID(gtid_mode=ON),简化主从复制管理。
    • 作用:通过唯一事务 ID 确保数据一致性,避免复制跳跃。

15. 临时表与事务

  • 答案

    • 事务内临时表:MySQL 8.0 允许在事务中创建临时表,且事务回滚时临时表不会被删除(需手动 DROP)。

总结:MySQL 8.0 核心优化方向

  • 性能:并行查询、在线 DDL、JSON 优化。
  • 功能:窗口函数、CTE、递归查询。
  • 高可用:Group Replication 2.1、GTID。
  • 兼容性:默认认证插件、动态数据字典。

基于DBLens for MySQL这一专业化数据库工具,文中所有SQL逻辑均完成部署与验证。