选型

MySQL

你可能会说

面试官问为什么用 MySQL 不用 PostgreSQL,我只答得出「公司一直用这个」。

互联网业务最常用的开源关系型数据库数据按表存放,用 SQL 查询,用事务保证一组写入要么全成要么全败。默认引擎 InnoDB 提供行级锁和崩溃恢复;会它的人最多,遇到问题最容易搜到答案。
也常被叫作MySQL 数据库InnoDB
先问一句要事务和 JOIN?
默认MySQL→擅长订单/用户→别用海量日志分析
成熟度采用

什么时候选它

  • 订单、用户、库存这类必须保证一致的业务数据
  • 需要 JOIN、聚合、事务的传统业务系统
  • 团队和招聘市场都熟:排错、招人、托管服务都容易
  • 单表千万行以内、读写比正常的在线业务

什么时候别选

  • 海量日志、埋点、时序数据(列式库或对象存储更合适)
  • 以全文检索、地理、向量检索为核心的产品
  • 写入量巨大且能接受最终一致——分库分表前先想清楚
容易混在一起 · 怎么分
MySQL≠PostgreSQL

MySQL 生态更「人多手熟」,运维和托管最成熟;PG 的 SQL 能力、扩展类型(JSONB、地理、向量)和约束更完整。

MySQL≠Redis

MySQL 负责「最终正确」,Redis 负责「快」;别把 Redis 当唯一存储。

InnoDB≠MyISAM

InnoDB 有事务、行锁、崩溃恢复;MyISAM 是表锁且不支持事务,只剩历史包袱。

Q面试会问什么

  • 问:为什么默认 InnoDB?
    答:支持事务、行级锁、MVCC 和外键,崩溃后能恢复;MyISAM 不支持事务、是表锁,已不推荐。
  • 问:索引为什么用 B+ 树?
    答:层数低、磁盘 IO 少,叶子节点相连适合范围查询和排序;哈希索引只能等值查询。
  • 问:RR 和 RC 的区别?
    答:RR 同一事务里多次读结果一致(快照 + 间隙锁防幻读),RC 每次读最新已提交数据;互联网业务常用 RC。
延伸阅读 · 权威出处