原则
尽量小,简单,避免null
ID列
统一用BIGINT类型
不能用字符串当做ID存储.insert慢(不连续),select也慢
Schema设计陷阱
1太多的列 -> 转换代价高
2太多的关联 -> 尽量避免关联
3枚举类型
4变相的null
范式和反范式 -> 要混用,保持一定数据的冗余
优点:写密集场景性能高
缺点:一般情况都需要关联
技巧
1可以用CQRS模式将查询服务和写服务分离
2通过缓存表和统计表解决复杂查询与统计的问题
3通过数据行加槽(slot)将一行数据分解到多行,降低并发(避免行锁).后面再用异步汇总
如:update hit_count set cnt=cnt+1 where slot = RAND() * 100 -> 相当于加了100个槽,将更新的数据分散到槽内
4Alter Table大部分修改表结构的方法都是新建一张表,从旧表查所有的数据再插入到新表,然后删除旧表,所以大部分都很慢,可以主库切换(从无流量表结构修改),影子拷贝(新建表,重命名,删表)更平滑的过度