xyzjr 发表于 2018-10-10 06:56:18

MySQL设计规范

1.数据库设计规范
  数据库命名规范
  数据库基本设计规范
  数据库索引设计规范
  数据库字段设计规范
  SQL开发规范
  数据库操作规范
1.1    数据库命名规范
  对象使用小写字母并用下划线分隔;
  禁止使用MySQL保留关键字;
  对象名不要超过32个字符;
  PS:其实在oracle11g之前版本,对象都是32位以下,12C好像增大到128.
  临时表以tmp前缀日期后缀;
  备份表以bak前缀日期后缀;
  存储相同数据的列名和类型都要一致。
1.2    数据库基本设计规范
  所有表使用InnoDB存储引擎;
  库和表统一使用UTF8;
  MySQL中UTF8下汉字占用3个字节,ASCII码占用1个字节;
  表和字段添加注释;
  尽量控制单表数据量的大小,建议控制500W以内;
  PS:单表数据量太大,备份、恢复、修改表结构DDL都有很大问题。
  PS:历史数据归档,分库分表控制单表的数据量大小。
  谨慎使用分区表;(这是教案中给的建议)
  PS:分区表在物理上分为多个文件,逻辑上表现为一个表,谨慎选择分区键,跨分区查询效率可能更低,建议采用物理分表的方式管理大数据。
  尽量做到冷热数据分离,减小表的宽度;
  PS:MySQL表最多支持4096列。
  禁止在表中建立预留字段;
  PS:预留字段无法选择合适的数据类型,对预留字段进行修改,会锁表影响并发。
  禁止在数据库中存储图片、文件等二进制数据;
  PS:DB中存储指向文件服务器的图片或文件的地址信息。
  禁止在线上对数据库进行压力测试;
  禁止从开发测试环境直连生产库;
1.3    数据库索引设计规范
  建议单表索引的数量不要超过5个;
  每个InnoDB表必须有个主键;
  PS:不能使用更新频繁的列作为主键,不能使用多列作为主键,
  不能使用uuid、md5、hash、字符串作为主键,
  主键建议使用自增ID值。
  索引列建议:
  where从句后的列,包含在group by,order by, distinct中字段的单列索引或组合索引,多表联合的Join列。
  索引列的顺序(下面优先级别从上到下由高到低):
  选择性高的列在左侧(优先考虑);
  字段长度小的列在左侧;
  使用最频繁的列在左侧。
  避免建立冗余和重复索引:
  如primary key(id), index(id), unique(id)à重复索引;
  如index(a, b, c), index(a, b), index(a)à对a列冗余索引。
  对于频繁的查询优先考虑适应覆盖索引:
  有点类似oracle的回表操作,直接在索引列上取出Select的列。
  避免InnoDB表进行索引的二次查找。
  Select a, b from tab where c = xxx;
  create index index_name on tab(c, a, b);
  可把随机IO转为顺序IO。
  尽量避免使用外键:
  建立外键时,会自动在外键上建立索引;
  不建议使用外键约束,但要在表之间的关联列上建立索引;

页: [1]
查看完整版本: MySQL设计规范