数据库架构设计

1 数据库命名规范

1)所有数据库对象名称:

 

小写加下划线分割

MySQL对象名称在默认情况下是大小写敏感

MySQL的对像其实都是⼀一个⽂文件,而linux文件名是大小写敏感

Dbname / dbname,MyTable / mytable  两个东西

2)所有MySQL数据库对象名称禁⽌止使⽤用MySQL保留关键字

一定要提前准备⼀一份对应版本的关键字表 建表的时候没问题,但SQL查询就挂了了    加``解决 

所有的数据库对象名称:见名知义,但最长不不要超过32个字符(不不要中英⽂文混合)

所有临时表命名:tmp_tablename_20191215 所有的备份表:bak_tablename_20191215

索引:idx_ pk_

所有存储类型相同的列名以及长度必须保持一致

order:product_title 50

erp_instock: product_title 50

2 数据库设计规范

正常情况下建议使⽤用innoDB,v5.6版本后默认都是innoDB

字符集 UTF-8 统一字符集避免乱码

UTF-8的字符集是⼀一个汉字3个字节:varchar(255) UTF-8 255*3=765字节

控制单表的数据量大小:单表最大5千万数据

对于⽇日志数据,进行行归档

对于业务数据进行分库分表

分区表谨慎使⽤

禁止在表中建⽴立预留字段:varchar_column  没有实际意义

违背上面的命名规则 时间久了,不看业务代码,完全是魔鬼字段

 

3 数据库索引设计规范

3.3. 数据库索引设计规范
单张表索引数量建议不不超过5个,如果列多可以适当增加

索引过多:SQL在进行优化器评估的时候会有更大的开销

绝对不允许给表的每一列都建立索引

每个innodb表都必须有⼀一个主键,innoDB表就是⼀一个索引组织表
表数据的实际存储顺序只能有⼀一种,innoDB是按照主键进行存放的 如果没有主键,mysql会优先选择第⼀一个非空唯⼀索引来做主键

如果上面这个没有,mysql会⾃动生成一个36个字节的主键,但性能不好

不能使用更新频繁的列和联合索引做主键,主键不断变,数据的存放顺序就会不断变化

不要使⽤用UUID、MD5、HASH等做主键,不能保证这些值是按顺序增长的。如果生成较小的 字符串就会导致不断变化数据存储的位置,影响I/O性能

要在哪些列列上建立索引:

没有最好只有最适合 explain

where后

join的连接列

筛选项最大的放在索引最左侧

避免建立冗余和重复索引

对于频繁查询的数据列,优先考虑使⽤用覆盖索引

尽量量避免加入外键约束 因为外键写入的时候会降低存储效率 但要给这些关联字段加索引

 

posted @ 2020-02-20 21:39  jack-jin  阅读(206)  评论(0)    收藏  举报