【原创】因酷数据库开发规范

基本规范

  1. 所有表必须使用Innodb存储引擎
    Innodb存储引擎是Mysql5.6以后默认引擎
    支持事务,行级锁,更好的恢复性,高并发下性能更好
  2. 数据库和表的字符集统一采用utf8
    兼容性更好(不支持手机表情)
    避免由于字符集转换产生的乱码
  3. 所有表和字段都需要添加注释
  4. 禁止在数据量存储图片,文件等二进制数据
  5. 单表数据最好控制在500万以内
  6. 尽量做到冷热数据分离,经常一起使用的列放在一起
    减少磁盘IO,更有效利用缓存
  7. 禁止在表中建立预留字段

命名规范

  1. 数据库库名,表名必须使用小写字母并用下划线分割
    inxedu_customer_zhangqiang_wx
  2. 数据库字段名命名使用驼峰格式
  3. 要做到见名识意,不要超过32字符,禁止使用关键字
    https://dev.mysql.com/doc/refman/5.7/en/keywords.html
  4. 所有存储相同数据的列名和列类型必须一致

字段规范

  1. 优先选择符合存储需要的最小的数据类型,过大长度会消耗更多的内存
  2. unsigned
  3. varchar
  4. 避免使用text,blob数据类型
    tinytext,text,midumtext,longtext
    text(64kb)
    建议把text,blob列分离到单独的扩展表中
  5. 避免使用enum数据类型
    禁止使用数值作为enum值
  6. 尽可能把所有列定义为not null
  7. 不要用字符串存储日期时间
    使用timestamp或datetime
    timestamp 1970-01-01 00:00:00 ~ 2038-01-19 03:1407
  8. 财务相关的金额类型必须使用decimal类型

索引规范

  1. 限制每张表索引数量,单表索引不超过5个
    禁止给表中每一列都建立单独的索引
  2. 每个Innodb表必须有一个主键
  3. select,update,delete的where从句中的列
    order by,group by,distinct中的字段
    多表join的关联列
  4. 区分度 count(distinct 列名)/count(*)
  5. 覆盖索引
  6. 避免使用外键(但是要建立索引)

开发规范

  1. 充分利用表上已经存在的索引
  2. 避免使用双%的查询条件
  3. 避免使用not in
  4. 禁止跨库查询
  5. 禁止使用select *
  6. 禁止使用不包含字段列表的insert
  7. 避免使用子查询
    子查询结果集无法使用索引
    子查询会产生临时表
  8. 避免使用join关联太多的表,建议不超过5个
  9. 使用in代替or
  10. 拆分复杂的大sql为多个小sql
  11. 更新异常

执行计划

  1. explain
    system,count,eq_ref,ref,ref_or_null,index_merge,range,index,all

慢查询日志

  1. set global slow_query_log_file=/sql_log/slow_log.log;
    set global log_queries_not_indexes=on;
    set global long_query_time=0.001;
    set global slow_query_log=on;
  2. mysqldumpslow 文件名

你可能感兴趣的:(【原创】因酷数据库开发规范)