数据库命名规范
数据库基本设计规范
数据库索引设计规范
数据库字段设计规范
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。
尽量避免使用外键:
建立外键时,会自动在外键上建立索引;
不建议使用外键约束,但要在表之间的关联列上建立索引;