(转)MySQL开发规范

一、基础规范

1) 使用InnoDB存储引擎

2) 数据库字符集使用UTF8,校对字符集使用utf8_general_ci

3) 所有表、字段都尽量添加注释

4) 库名、表名、字段名使用小写字母,禁止超过32个字符,须见名知意

5) 非唯一索引以 “idx_字段1_字段2” 命名,唯一索引必须以 “uniq_字段1_字段2” 命名

二、查询规范

1) SQL语句尽可能简单,大的SQL想办法拆分成小的SQL实现

2) 不要使用SELECT * ,查询具体要用到的字段

3) 禁止like做where条件(会全表扫描且不能用索引)

4) 除非必要,避免使用 != 等非等值操作符(会导致用不到索引)

5) Where条件里不要对列使用函数(不会引用索引)

6) 能确定返回结果只有一条时,使用limit 1(LIMIT分页注意效率,LIMIT越大,效率越低)

7) 少用子查询,改用JOIN(子查询要在内存里建临时表)

8) 多表JOIN的字段,区分度最大的字段放在前面

9) IN条件里的数据数量要尽量少,超过200个用EXIST代替IN

10) Where字句中同一个表的不同字段组合建议小于5组(否则考虑分表)

11) 禁止单条语句同时更新多个表

12) 事务要尽量简单,整个事务的时间长度不要太长

三、表设计规范

1) 用DECIMAL代替FLOAT和DOUBLE存储精确浮点数(精确数据)

2) 使用TINYINT代替ENUM类型(便于迁移时兼容)

3) 尽可能不使用TEXT、BLOB类型(该数据类型不能设置默认值、不便于排序、不便于建立索引)

4) 同一意义的字段设计定义必须相同(便于联表查询)

5) 所有字段均定义为NOT NULL(避免使用NULL字段,NULL字段很难查询优化,NULL字段的索引需要额外空间,NULL字段的复合索引无效)

6) 表必须有主键,不使用更新频繁的列做主键、尽量不使用字符串列做主键,尽量使用非空的唯一自增键做主键

四、索引设计规范

1) 单表索引数量不超过10个

2) 单个字段不要超过两个索引

3) 新建的唯一索引必须不能和主键重复

4) 避免冗余和重复索引

5) 尽量不要在频繁更新的列上建立索引

6) 不在低基数列上建立索引,例如状态、类型等

7) 不在索引列进行数学运算和函数运算(参与了运算的列不会引用索引)

8) 复合索引须符合最左前缀的特点建立索引(mysql使用复合索引时从左向右匹配)

9) 重要的SQL中where条件里的字段必须被索引

10) Where条件里的字段顺序与索引顺序无关,优化器会自动调整

11) 索引选择性= Cardinality / Total Rows,即基数 ÷ 数据行数,值越接近1说明使用索引的过滤效果越好

12) 建立索引时,务必先explain,查看索引使用情况

作者:动力节点

来源:知乎

原文链接:https://zhuanlan.zhihu.com/p/54643742

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 13,327评论 0 44
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 7,303评论 1 8
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 12,399评论 5 116
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 10,179评论 0 30
  • 蟾光冷寂天地寒 窥窗悄入照无眠 但恨夜半人忽醒 何来无事苦辗转 2015.12.26
    我刀划破长空阅读 1,405评论 0 3

友情链接更多精彩内容