mysql基础面试题

50 阅读2分钟

最近对mysql的基础知识很感兴趣,所以希望通过查询网络上的面试题来巩固下基础,所以如下

1 普通索引跟唯一索引应该如何选择

在 MySQL(InnoDB)里,“普通二级索引(KEY)”和“唯一索引(UNIQUE KEY)”在存储结构、查询性能上几乎一模一样,真正的差异只有三点:

  1. 唯一索引多一道“唯一性约束”检查
  2. 唯一索引对优化器的基数估计更准,某些场景能拿到更优的执行计划
  3. 唯一索引不能存重复值,因此插入/更新时可能多一次“冲突检测”往返
  • 查询

    • 当普通索引为条件时查询到数据会一直扫描,直到扫完整张表
    • 当唯一索引为查询条件时,查到该数据会直接返回,不会继续扫表
  • 更新

    • 普通索引会直接将操作更新到 change buffer 中,然后结束
    • 唯一索引需要判断数据是否冲突

所以**「唯一索引更加适合查询的场景,普通索引更适合插入的场景」**

2 一条sql命令一直查询慢的原因是什么

「1.没有用到索引」

  • 比如函数导致的索引失效,或者本身就没有加索引

「2.表数据量太大」

  • 考虑分库分表吧

「3.优化器选错了索引」

  • 「考虑使用」 force index 强制走索引

3 什么是数据库的主从热备

数据库的主从热备(Master-Slave Hot Standby)是一种高可用容灾架构:

  1. 主库(Master)承担所有写入请求,并把数据变更实时记录到二进制日志(binlog);
  2. 从库(Slave)通过 I/O 线程拉取 binlog 并写入本地中继日志(relay log),再由 SQL 线程重放这些日志,实现与主库的实时同步;
  3. 从库保持“热”状态——服务与数据均处于运行状态,一旦主库故障,可在秒级手动或自动切换为新的主库,几乎不中断业务。

核心特点

  • 实时同步:延迟通常在毫秒~秒级,可保证数据最新。
  • 读写分离:从库可分担读请求,缓解主库压力。
  • 快速恢复:故障时 RTO 可达秒级,RPO 接近零。
  • 在线扩容:按需增加从库即可扩展读性能,无需停机。

典型流程

  1. 初始全量同步(mysqldump/mysqlpump 或物理拷贝)。
  2. 配置主库:开启 binlog、创建复制账号、记录位点。
  3. 配置从库:change master to…、start slave。
  4. 持续监控复制延迟与状态,必要时借助 MHA、Orchestrator 等实现自动切换。