Skip to content

面试速答(先看这里)

**一句话结论:**首先,做了分库分表之后,所有的读和写操作,都需要带着分表字段,这样才能知道具体去哪个库、哪张表中去查询数据。

60秒标准回答:

分库分表之后,会带来很多问题

首先,做了分库分表之后,所有的读和写操作,都需要带着分表字段,这样才能知道具体去哪个库、哪张表中去查询数据。如果不带的话,就得支持全表扫描

但是,单表的时候全表扫描比较容易,但是做了分库分表之后,就没办法做扫表的操作了,如果要扫表的话就要把所有的物理表都要扫一遍

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**但是,单表的时候全表扫描比较容易,但是做了分库分表之后,就没办法做扫表的操作了,如果要扫表的话就要把所有的物理表都要扫一遍。
  • **要点2:**还有,一旦我们要从多个数据库中查询或者写入数据,就有很多事情都不能做了,比如 跨库事务就是不支持的。
  • **要点3:**所以,分库分表之后就会带来因为不支持事务而导致的数据一致性的问题。
  • **要点4:**其次, 做了分库分表之后,以前单表中很方便的分页查询、排序等等操作就都失效了。
  • **要点5:**除此之外,还有一些其他的问题,比如 二次分表的问题,一致性ID的问题 等等。

**记忆锚点:**而导致的数据一致性 → 跨库事务

易错提醒:

  • 但是,单表的时候全表扫描比较容易,但是做了分库分表之后,就没办法做扫表的操作了,如果要扫表的话就要把所有的物理表都要扫一遍。
  • 还有,一旦我们要从多个数据库中查询或者写入数据,就有很多事情都不能做了,比如 跨库事务就是不支持的。

加分表达:

  • 如果不带的话,就得支持全表扫描。

追问准备:

  • 围绕「而导致的数据一致性」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「跨库事务」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

分库分表之后,会带来很多问题。

首先,做了分库分表之后,所有的读和写操作,都需要带着分表字段,这样才能知道具体去哪个库、哪张表中去查询数据。如果不带的话,就得支持全表扫描。

但是,单表的时候全表扫描比较容易,但是做了分库分表之后,就没办法做扫表的操作了,如果要扫表的话就要把所有的物理表都要扫一遍。

还有,一旦我们要从多个数据库中查询或者写入数据,就有很多事情都不能做了,比如跨库事务就是不支持的。

image.png

所以,分库分表之后就会带来因为不支持事务而导致的数据一致性的问题。

📄 ✅常见的分布式事务有哪些?

打开文档:✅常见的分布式事务有哪些?

其次,做了分库分表之后,以前单表中很方便的分页查询、排序等等操作就都失效了。因为我们不能跨多表进行分页、排序。

📄 ✅分库分表后如何进行分页查询?

打开文档:✅分库分表后如何进行分页查询?

除此之外,还有一些其他的问题,比如二次分表的问题,一致性ID的问题等等。

📄 ✅分库分表后,表还不够怎么办?

打开文档:✅分库分表后,表还不够怎么办?

二次分表的问题可以用一致性哈希解决:

📄 什么是一致性哈希?

打开文档:什么是一致性哈希?

分布式ID可以参考:

📄 ✅分布式ID生成方案都有哪些?

打开文档:✅分布式ID生成方案都有哪些?