架构设计

表结构
        # 列属性
尽量使用整型,避免字符串类型。
尽量避免NULL(除非null值有意义)。NULL需要额外的存储空间; NULL列被索引时,每条记录都需要额外的字节处理NULL; 
varchar分配需要的长度。缺点:排序、内存临时表都按最大值处理
ENUM与字符串,根据业务,如果enum值范围不会经常改变,可以使用
          避免非顺序的主键。插入性能变低        

        # 列分布
易变资料与不常改变资料分开保存。提高写效率
经常查询的属性与不常查询的属性分开保存。提高查询效率
大字段属性尽量单独放在一个表中
尽量采用自增主键,或者局部自增的联合主键(时间、id)
适当进行冗余存储

索引
        # 创建
innodb,把主键放在索引列最后
避免创建重复索引
联合索引,选择性高的列放在前面
          索引列的cardinality值越高越好,越高选择性越高       

        # 使用
          隔离列:比较符合左边的索引列不能进行任何运算、转换
          select 指定列 替换select *
          字符串索引是前缀匹配
          联合索引最左前缀
          连接查询时,使用同类型列进行比较

其他
          触发器使用存储过程代替
大数据量的统计放在业务压力小的时候进行
业务比较多的时候,按业务进行分库
日志表增加冗余列"当日日期",当每日统计进行group by时可以使用索引
          定期整理碎片。alter table xx engine=<原引擎>;
请使用浏览器的分享功能分享到微信等