禁止三表及以上 join 查询。
原因
- 性能变慢
- 对于超大的表,提前规划拆分为2个服务,或其他做好拆分服务的准备;
解决
适用于结果集较小inner join 关联select * from a where ...select * from b where aid in ()select * from c where bid in ()
反范式表
将需要的查询条件都放入到一个表中,创建组合索引。
- 适合于单库处理
数据集市
通过 ETL 将原始的数据库 复制传输到 数据仓库中。
倒排表,创建新的表,空间换时间。
大表为什么不能使用自增主键?
- 大表因为数据量巨大,所以会有分库分表,自增id对分布式支持很差。
- 范围分片会导致尾部热点效应。
- 0-1亿 a表 1-2亿 b 表 2-3亿 c表。 尾部热点效应指当id 处理 c 表范围时, c表的压力最大, ab 表因冷数据压力很小。
解决方案
- 不能使用 uuid 作为自增主键。
- uuid 值是无序的,后续插入数据会导致所有重排,浪费性能。
- uuid 值很长,没有使用数字做主键好。
- 使用分布式有序的算法
- 雪花算法
- 其他算法
