zoukankan      html  css  js  c++  java
  • MySQL开发规范

    MySQL开发规范

    转载于:https://blog.csdn.net/bjpowernode_com/article/details/86299552

    一、基础规范

    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,查看索引使用情况

    ---------------------

    五、数据库三大范式

      第 一范式和第二范式在于有没有分出两张表,第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表, 第三范式是要求已经分成了多张表,那么一张表中只能有另一张表中的id(主键),而不能有其他的任何信息(其他的信息一律用主键在另一表查询)。

    第1范式:每个表中都有1列,并且该列是不可拆分的最小单元

    第2范式:1张表只描述一件事情

    第3范式:用外键做表的关联

    六、数据库五大约束

    1)primary KEY:设置主键约束;
    2)UNIQUE:设置唯一性约束,不能有重复值;
    3)DEFAULT:默认值约束,height DOUBLE(3,2)DEFAULT 1.2 height不输入是默认为1,2
    4)NOT NULL:设置非空约束,该字段不能为空;
    5)FOREIGN key:设置外键约束。

  • 相关阅读:
    es5中,一个在js中导入另一个js文件。
    移动端字体小于12号字的时候,line-height居中的问题
    初学者都能懂得 Git 说明
    一探 Vue 数据响应式原理
    文件的命名规则
    Vue 的 watch 和 computed 有什么关系和区别?
    MVC 与 Vue
    博客园皮肤设置
    java使用run和start后的线程引用
    Python改变一行代码实现二叉树前序、中序、后序的迭代遍历
  • 原文地址:https://www.cnblogs.com/carsonwuu/p/10300313.html
Copyright © 2011-2022 走看看