一、核心军规
1、尽量不在数据库做运算
2、控制单表数据量
①一年内的单表数据量预估
②合理分表不超载
③建议单库丌赸过300-400个表
3、保持表身段苗条
①单表字段数上限控制在20~50个
4、平衡范式与冗余
5、拒绝3B
二、字段类军规
1、用好数值字段类型
2、将字符转化为数字
数字型比字符串型索引更高效、查询更快、占用空间更小(能用数字类型就别用字符类型)
3、优先使用ENUM和SET
4、避免使用NULL字段
缺点:很难进行查询优化
NULL列加索引,需要额外空间
含NULL复合索引无效
举例:不要使用 ‘a’ char(32) DEFAULT NULL和 ‘b’ int(10) NOT NULL
应该改成 ’c‘ int(10) NOT NULL DEFAULT 0
5、少用并拆分TEXT/BLOB
TEXT类型处理性能远低亍VARCHAR,比如会强制生成硬盘临时表和浪费更多空间(若必须使用则拆分到单独的表)
6、不在数据库里存图片
三、索引类军规
1、谨慎合理添加索引
能不加的索引尽量不加,综合评估数据密度和数据分布和最好丌赸过字段数20%
2、字符字段必须建前缀索引
--注意1:前缀索引只能适用于普通索引中,不能使用在unique中
--注意2:前缀索引只支持英文和数字
3、不在索引列做运算
会导致无法使用索引、导致全表索引
4、自增列或全局ID做INNODB主键
5、尽量不用外键
四、SQL类军规
1、SQL语句尽可能简单
2、保持事务(连接)短小
事务/连接使用原则:即开即用,用完即关
不事务无关操作放到事务外面, 减少锁资源的占用
丌破坏一致性前提下,使用多个短事务代替长事务
3、尽可能避免使用SP/TRIG/FUNC
4、尽量不用 SELECT *
5、改写OR为IN()
五、约定类军规
1、隔离线上线下
原则:线上连线上,线下连线下
实时数据用real库 、模拟环境用sim库、测试用qa库和开发用dev库
2、禁止未经DBA确认的子查询
3、永远不在程序端显式加锁
4、统一字符集为UTF8、校对规则为 utf8_general_ci
5、统一命名规范
库表等名称统一用小写
索引命名默认为“idx_字段名”
库名用缩写,尽量在2~7个字母
注意避免用保留字命名