Sunday面试指南

MySQL 分区表和分库分表有什么区别?分区后查询一定更快吗?

下面是一段教学用的模拟面试。

🧑‍💻 面试官:MySQL 分区表和分库分表有什么区别?

🙋‍♂️ 我:分区表在一张逻辑表里分开存储,分库分表则拆到多张表或多个库。

🧑‍💻 面试官:按月份分区以后,查任意一个 id 都会更快吗?

🙋‍♂️ 我:不一定,要看能否进行分区裁剪。

🧑‍💻 面试官:原来主键只有 id,现在想按 created_at 分区,为什么建表可能失败?直接把主键改成两列,又改变了什么?

分区首先解决「数据如何组织和管理」。查询是否变快,要看裁剪和索引;唯一性也必须重新检查。

面试速答(60 秒版)

MySQL 分区表在一个逻辑表内,按规则把数据组织到不同分区。应用仍然可以查询同一个表,由数据库决定访问哪些分区。

分库分表则是把数据拆到不同表或不同实例,往往还需要路由、跨分片查询和一致性设计。分区不等于自动把负载分散到多台服务器。

查询只有能利用条件排除无关分区时,才可能获得裁剪收益;分区内依然需要合适索引。没有分区键条件的查询,可能仍要访问很多分区。

实际使用时,我会优先确认数据生命周期和查询模式。同时检查 MySQL 的唯一键约束:分区表达式涉及的列,需要包含在每个唯一键中。修改主键以后,也要确认业务唯一性没有被放宽。

分区组织,不是跨机器分片

图:分区组织,不是跨机器分片。

知识点详解:分区能帮什么,不能自动帮什么?

一张逻辑表,和多台数据库不是同一件事

假设事件表保留两年的数据,大部分查询只看最近一个月。按时间分区后,可以让不同时间范围的数据进入不同分区。

查询仍然面向事件表,数据库负责按分区规则管理。删除过期数据时,也可以评估按分区管理,而不是逐行删除大量历史记录。

但是,分区仍然属于当前数据库的存储与执行能力范围。它没有自动带来跨机器分片,也没有自动解决主库 CPU 或写入瓶颈。

分库分表则需要决定记录路由到哪里,以及跨分片聚合、事务和扩容如何处理。不能把“拆成几部分”当成两种方案完全相同的证据。

分区裁剪为什么需要查询条件?

如果按 created_at 分区,查询明确限定某个月,优化器可以尝试排除不可能符合的分区。

但只查询 id 时,数据库未必能够知道记录属于哪个月份。即使每个分区内有 id 索引,也可能需要在多个分区中分别查找。

所以分区与索引不是替代关系:裁剪减少需要访问的分区,索引减少分区内部需要扫描的记录。具体裁剪规则见 MySQL 分区裁剪文档。

先裁剪分区,再使用分区内索引

图:剪枝先缩小要访问的分区;分区内能否继续有效使用索引,还要看索引和查询条件。

为什么主键会挡住按时间分区?

MySQL 要求,分区表达式使用的列包含在每一个唯一键中,主键也属于唯一键。如果主键只有 id,而分区依据 created_at,这个设计就可能违反限制。

把主键改成 id、created_at,可能满足分区要求,却改变了唯一性含义。数据库现在保证的是两列组合不重复,不再仅凭这个主键保证 id 跨时间全局唯一。

不能为了让建表通过,悄悄改变业务约束。规则见 分区键与唯一键限制。

组合唯一,不等于 id 单独唯一

图:组合唯一,不等于 id 单独唯一。

怎么判断该不该使用分区?

先看数据是否有明确的分区维度,以及查询和生命周期是否经常使用这个维度。

然后检查执行计划,确认相关查询实际访问哪些分区、使用什么索引。再用相同数据规模比较查询延迟、写入成本和维护操作影响。

还要设计未来分区:新月份如何添加,异常时间戳如何处理,过期分区何时删除,备份和恢复是否支持对应操作。分区数量也不是越多越好,管理和执行成本同样需要评估。

本题解释数据库结构,不强行添加 TypeScript/Python 的分区 API 示例。SQL 方案也必须围绕具体表约束设计,不能给所有业务一份通用建表语句。

面试官继续追问

分区表可以完全不建索引吗?

不可以这样推断。即使成功裁剪到一个分区,分区内部可能仍有大量记录。还要根据过滤与排序条件建立索引。

时间分区适合所有大表吗?

不适合。若主要查询与时间无关,裁剪收益可能有限。先看访问模式,而不是只看记录数。

删除一个分区,一定没有影响吗?

仍要考虑元数据锁、复制、备份和版本限制。维护操作需要计划,不能把“比逐行删方便”说成“完全无成本”。

面试速记卡

  • 分区表:同一逻辑表内组织数据。
  • 分库分表:不同表或实例,需要路由与跨分片设计。
  • 查询收益:裁剪与索引一起判断。
  • 唯一键:包含分区表达式相关列,检查约束语义变化。
  • 适用方向:查询维度与数据生命周期匹配。

公司面试真题

这道题暂未收录可核验的公司真题来源。你可以先阅读本文解析,或浏览已收录的公司面试真题。

浏览公司面试真题 →
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历