禁止三表及以上 join 查询。

原因

  • 性能变慢
  • 对于超大的表,提前规划拆分为2个服务,或其他做好拆分服务的准备;

解决

  1. 适用于结果集较小
  2. inner join 关联
  3. select * from a where ...
  4. select * from b where aid in ()
  5. select * from c where bid in ()

反范式表
将需要的查询条件都放入到一个表中,创建组合索引。

  • 适合于单库处理

数据集市
通过 ETL 将原始的数据库 复制传输到 数据仓库中。
倒排表,创建新的表,空间换时间。

大表为什么不能使用自增主键?

  • 大表因为数据量巨大,所以会有分库分表,自增id对分布式支持很差。
  • 范围分片会导致尾部热点效应。
    • 0-1亿 a表 1-2亿 b 表 2-3亿 c表。 尾部热点效应指当id 处理 c 表范围时, c表的压力最大, ab 表因冷数据压力很小。

解决方案

  • 不能使用 uuid 作为自增主键。
    • uuid 值是无序的,后续插入数据会导致所有重排,浪费性能。
    • uuid 值很长,没有使用数字做主键好。
  • 使用分布式有序的算法
    • 雪花算法
    • 其他算法