# 列属性
尽量使用整型,避免字符串类型。避免非顺序的主键。插入性能变低
尽量避免NULL(除非null值有意义)。NULL需要额外的存储空间; NULL列被索引时,每条记录都需要额外的字节处理NULL;
varchar分配需要的长度。缺点:排序、内存临时表都按最大值处理
ENUM与字符串,根据业务,如果enum值范围不会经常改变,可以使用
# 列分布
易变资料与不常改变资料分开保存。提高写效率
经常查询的属性与不常查询的属性分开保存。提高查询效率
大字段属性尽量单独放在一个表中
尽量采用自增主键,或者局部自增的联合主键(时间、id)
适当进行冗余存储
索引
# 创建
innodb,把主键放在索引列最后索引列的cardinality值越高越好,越高选择性越高
避免创建重复索引
联合索引,选择性高的列放在前面
# 使用
隔离列:比较符合左边的索引列不能进行任何运算、转换
select 指定列 替换select *
字符串索引是前缀匹配
联合索引最左前缀
连接查询时,使用同类型列进行比较
其他
触发器使用存储过程代替
大数据量的统计放在业务压力小的时候进行
业务比较多的时候,按业务进行分库定期整理碎片。alter table xx engine=<原引擎>;
日志表增加冗余列"当日日期",当每日统计进行group by时可以使用索引