Mysql设计规约

188 阅读2分钟
  1. 建表规约

    1. 表、字段命名

      1. 不使用驼峰命名法
      2. 不使用复数名词
    2. 数据类型

      1. 小数类型为decimal

      2. 货币使用最小货币单位(RMB分),数据类型bigint

      3. 字符串长度几乎相等使用char(如身份证号)

        1. char比varchar节约一个字符
        2. 创建索引时,根据情况只取前几位
      4. varchar长度不要超过5000

    3. 表里必备3个字段:

      1. id
      2. create_time
      3. update_time
    4. 建表推荐规约

      1. 表的命名:业务名称_表的作用
      2. 库名与应用名称一致
      3. 如果修改了字段含义或增加状态,及时更新字段注释
      4. 字段允许适量冗余,减少join次数,注意数据一致性!
      5. 单表行数超过500w行,或者表的容量超过2GB,才考虑分库分表
  2. 索引规约

    1. 索引的特性:

      1. 持久性
      2. 有序性
    2. 索引的分类:

      1. 按存储形式

        1. 聚簇索引(主键)
        2. 非聚簇索引(非主键)
      2. 数据约束

        1. 主键索引
        2. 唯一索引
        3. 非唯一索引
      3. 索引列的数量

        1. 单列索引
        2. 组合索引
      4. innoDB可以创建的索引

        1. 主键索引
        2. 唯一索引
        3. 普通索引
      5. 区分:覆盖索引

        1. 不属于innoDB可以创建的索引
        2. 数据只从索引中获取而不回表,属于索引的一种使用方式。
    3. 索引可选的数据结构:

      1. hash表:只适合单值查找,不适合范围查找

      2. 二叉查找树——最差情况退化到链表(时间复杂度:log(N))

      3. 平衡二叉查找树——左右子树层级最多相差1

      4. btree

        1. 索引持久化保存在磁盘上,解决树太高时磁盘IO次数过多;如btree存储100万条Long型数据只需2层,从而提高查找速度
        2. 使用btree依据:Mysql(InnoDB引擎)的数据页16KB
      5. b+tree

        1. 是Mysql(InnoDB引擎)使用的数据结构
        2. 中间节点不再存储数据,叶子结点存储数据是双向链表,使btree更适合范围查询
        3. 单张表字段过多时影响性能,设计表时应避免此种情况
    4. 索引命名规约

      1. 主键:pk_字段名
      2. 唯一索引:uk_字段名
      3. 普通索引:idx_字段名
    5. 创建索引规约

      1. 有唯一特性的字段必须创建成唯一索引
      2. 在varchar字段上建立索引时,必须制定索引长度
      3. 创建组合索引时,区分度最高的在最左边
    6. 创建索引应避免以下误解:

      1. 索引宁滥勿缺
      2. 吝惜创建索引
      3. 抵制唯一索引