数据库基本设计规范
命名规范
表名称禁止使用mysql保留关键字
表命名要能做到见名识义,并且最好不要超过32个字符
表名必须小写并以下划线隔开
临时表必须以tmp为前缀并以日期为后缀,备份表必须以bak为前缀并以日期为后缀
存储相同数据的列名和列类型必须一致
引擎选择
5.6以后的默认引擎是Innodb引擎
字符集
数据库和表的字符集统一使用UTF-8
注释
所有表和字段都需要添加注释
单表数据大小
尽量控制单表数据量的大小,建议控制在500万以内
分区表
谨慎使用MySQL分区表
减小表的宽度
尽量做到冷热数据分离,减小表的宽度
禁止在表中建立预留字段
禁止在数据库中存储图片,文件等二进制数据
禁止在线上做数据库压力测试
索引设计规划
索引对数据库的查询性能来说是非常重要的不要滥用索引
限制每张表上的索引数量,建议单张表索引不超过5个
每个Innodb表必须有一个主键
注意合理选择复合索引建的顺序
避免建立冗余索引和重复索引
对于使用频繁的查询优先考虑使用覆盖索引
避免Innodb表进行索引的二次查找
可以吧随机IO变为顺序IO加快查询效率
数据库字段设计规范
优先选择符合存储需要的最小的数据类型
将字符串转化为数字类型存储
INET_ATON('255.255.255.255')=4294967295
INET_NTOA(4294967295)=‘255.255.255.255’
对于非负数据采用无符号整型进行存储
SIGNED INT -2147483648~214748368
UNSIGNED INT 0-4294967295
避免使用TEXT\BLOB数据类型
建议BLOB或是TEXT列分离到单独的扩展表中
TEXT或BLOB类型只能使用前缀索引
避免使用ENUM数据类型
尽量把所有字段定义为NOT NULL
数据库SQL开发规范
避免数据类型的隐式转换
充分利用表上已存在的索引
程序连接不同数据库使用更不用的账号,禁止跨库查询
禁止使用select * 必须使用select<字段列表>查询
禁止使用不含字段列表的INSET语句
避免使用子查询,可以把子查询优化为join操作
避免使用JOIN 关联太多的表
减少同数据库的交互次数
使用in代替or
禁止使用order by rand()进行随机排序
where 从句中禁止对列进行函数转换和计算
在明显不会有重复值时使用UNION ALL 而不是UNION
数据库操作行为规范
超100万行要分批多次写操作