zoukankan      html  css  js  c++  java
  • MySQL设计规范

    参考文档:https://github.com/zhishutech/mysql-sql-standard/blob/master/SUMMARY.md

    基础规范

    • 全部使用 InnoDB 引擎,MyISAM适用场景非常少
    • 字符集:统一使用 utf8mb4
    • 注释规范
      • 表注释必须加
      • 字段注释除了id,created_at, updated_at, is_deleted, deleted_at 字段,其他字段注释必须加上(待补充)
      • 枚举类型的,必须标明每个状态的含义
    • 少用 text/blob
    • 不在数据库里存图片
      • 大文件和照片存储在文件系统,数据库里存文件地址

    • 拒绝 大SQL, 大事务, 大批量
      • 事务/连接使用原则:即开即用,用完即关
      • 与事务无关操作放到事务外面,减少锁资源的占用
      • 不破坏一致性前提下,使用多个短事务代替长事务
      • 打散大批量更新
    • 最少授权
    • 线上数据库和测试数据库尽可能保持一致
    • 禁止明文存储机密数据,需至少两次加密(部分数据可逆运算)

    命名规范

    • 术语表
    • 数据库名、表名、字段名只用小写字母、数字、下划线组合
    • 尽量使用单数形式
    • 命名长度不超过32个字符
    • 不使用select、update、order等保留字(待补充)
    • 尽量使用英文,少用或不用中文拼音
    • 临时用加上 tmp 前缀
    • 历史归档加上完整日期

    字段规范

    • 字段必须定义为NOT NULL并且提供默认值
    • 显式指定自增 int/bigint 作为主键
    • 使用timestamp记录时间
    • IPv4地址采用4字节int unsigned
    • 性别、状态、是否、小范围枚举使用tinyint
    • 字符集统一使用utf8mb4

    SQL规范

    • 简化每一条SQL,短事务,快速执行、无阻塞
    • 用括号显示确定AND、OR的先后顺序,避免混淆
    • 有些查询只需扫描索引,无需扫描数据(SELECT id, user FROM table WHERE id = 1234)
    • 过滤用户提交SQL,防止注入
    • 不用/少用子查询,改造成连接(JOIN)
    • 不用/少用FOR UPDATE、LOCK IN SHARE MODE,防止锁范围扩大化
    • SQL中不用/少用函数,可能造成额外开销或导致无法使用索引

    索引规范

      • 显式指定自增 int/bigint unsigned not null 作为主键
      • 尽量不用外键
      • 合理利用覆盖索引,但字段尽量不超过5个
      • 长字符字段使用前缀索引
      • 及时删除冗余索引
      • 选择适当的索引顺序,选择性高条件靠前
      • 基数(Cardinality)很低的字段不创建索引
      • 采用第三方系统实现text/blob全文检索
      • 不在索引列运算

        SELECT * FROM table_name WHERE id + 1 = 6630913
        SELECT * FROM table_name WHERE id = 6630913-1
        SELECT * FROM table_name WHERE to_days(current_date) – to_days(date_col) <= 10

  • 相关阅读:
    wifi与wimax
    短信中心号码
    (安卓)黑盒测试技巧个人整理
    数组实现栈的结构(java)
    tikv性能参数调优
    pt-table-checksum工具MySQL主从复制数据一致性
    MySQL索引原理以及类型
    TiDB数据库 mydumper与loader导入数据
    Innodb的体系结构
    MySQL核心之双一原则
  • 原文地址:https://www.cnblogs.com/pcx105/p/10956987.html
Copyright © 2011-2022 走看看