mysql优化笔记(1)----数据库设计规范

1数据库命名规范

1 数据库对象名称必须使用小写字母并用下划线分割
大小写敏感
2 所有数据库对象名称禁止使用mysql保留字段
'select id,username,from,age from tb_user',此处两个from,mysql无法区分
3 数据库对象的命名要能够做到见名识意,并且最好不要超过32个字符
举例 京东商城数据库 jd_shopdb,京东商城用户账号表 shop_account
4 临时表必须以tmp为前缀并以日期为后缀,备份库,备份表必须以bak为前缀并且以日期为后缀
5 所有储存相同数据的列名和列类型必须一致,如下面两个表中用到的customer_login 表的customer_id 字段

CREATE TABLE customer_info(
customer_info_id int unsigned AUTO_INCREMENT not null comment '自增id',
customer_id int unsigned not null comment 'customer_login表的自增id',
customer_name varchar(20) not null comment '用户真实姓名',
identity_card_type tinyint not null default 1 comment '证件类型',
identity_card_no varchar(20) comment '证件号码'
)
CREATE TABLE order_master(
order_id int unsigned AUTO_INCREMENT not null comment '自增id',
order_sn bigint unsigned not null comment '订单编号',
customer_id int unsigned not null comment 'customer_login表的自增id'
)

2数据库基本设计规范

1 所有表必须使用Innodb储存引擎
支持事务,行级锁,更好的恢复性,高并发下性能更好
2 数据库和表的字符集统一使用UTF8mb4,要确保库表字段字符集相同,mysql中UTF8(即UTF8mb3)汉字占3个字节,UTF8mb4汉字占4个字节,ASCII码占1个字节,注意在UTF8mb4字符集下定义一个char(20),实际占用80个字节,可保存20个中文
3 所有表和字段都要添加注释
方便后期维护数据字典
4 尽量控制单表数据的大小,建议控制在500万行以内
并不是mysql表限制,是因为修改表结构,备份和恢复数据都会有很大的困难,mysql储存多少数据,是由储存配置和文件系统决定的(32位win系统中当个文件不能超过2G),可以对历史数据归档,分库分表等手段控制单表大小,分区表实际上在物理上表现为多个文件,逻辑上表现为一个整体,跨分区查询效率可能更低,当多个分区在同一个磁盘上时io性能提升不大
5 尽量做到冷热数据分离,减小表的宽度,(最宽为4096列)
6 经常一起使用的列放到一个表中
7 禁止在表中建立预留字段
8 禁止早数据库中储存图片,文件等二进制数据
9 禁止在线上做数据库压力测试
10 禁止从开发环境,测试环境直连成产环境数据库

3数据库索引设计规范

1 限制每张表上的索引数量
建议单表索引不超过5个,索引可以增加查询效率,同时也会降低插入和更新效率
2 每个Innodb表必须有一个主键,不使用更新频繁的列作为主键,不使用UUID,MD5,HASH,字符串作为主键,
3 通常对where从句中的字段以及包含在order by,group by,distinct中的字段以及多表join的关联列建立索引
4 联合索引列的顺序,应当把区分度(唯一值的数量除以表的总行数)最高的列放在联合索引最左侧,其次把字段长度小的列放在左侧,最后把使用最频繁的列放在最左侧
5 避免建立冗余索引(primarykey(id),index(id),unique index(id))和重复索引(index(a,b,c),index(a,b),index(a))
6 对于频繁的查询优先考虑使用覆盖索引(所有字段加索引)
避免Innodb表进行索引的二次查询
可以把随机IO变为顺序IO加快查询效率
7 尽量避免使用外键(不使用外键约束,但是要在关联键上建立索引),外键会影响父表和子表的写操作

4数据库字段设计规范

满足第三范式

你可能感兴趣的:(mysql优化笔记(1)----数据库设计规范)