MySQL使用规范手册,程序员必知必会

背景
一个平台或系统随着时间的推移和用户量的增多 , 数据库操作往往会变慢;而在JAVA应用开发中数据库更是尤为重要 , 绝大多数情况下数据库的性能决定了程序的性能 , 如若前期埋下的坑越多到后期数据库就会成为整个系统的瓶颈;因此 , 更规范化的使用MySQL在开发中是不可或缺的 。
一、MySQL数据库命名规范
1、数据库所有表前缀均使用项目名称首字母缩写;
2、数据库所有对象名称均使用小写字母 , 并且单词之间通过下划线分开;
3、数据库所有对象名称禁止使用MySQL保留字及关键字 , 涉及到关键字的SQL查询需要将关键字用单引号括起来;
4、数据库所有对象名称不超过32个字符 , 并且命名要遵循见名知意原则;
5、数据库临时表必须以 pro_tmp_ 为前缀并且以日期 20190917 为后缀 , 备份表必须以 pro_bac 为前缀并以时间戳为后缀;(pro为项目名称首字母缩写)
6、数据库所有存储相同数据的列名和列类型必须保持一致 。
二、MySQL数据库基本设计规范
1、若无特殊说明 , 建表时一律采用Innodb存储引擎 。
选择合适的引擎可以提高数据库性能 , 如InnoDB和MyISAM , InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型 , 这两个表类型各有优劣 , 视具体应用而定;
基本的差别为:MyISAM类型不支持事务处理等高级处理 , 而InnoDB类型支持;MyISAM类型的表强调的是性能 , 其执行速度比InnoDB类型更快 , 但是不提供事务支持 , 而InnoDB提供事务支持以及外部键等高级数据库功能;
因此 , 其支持事务处理、支持外键、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎 。
2、数据库和表的字符集统一使用UTF8
数据库和表的字符集统一使用utf8 , 若是有字段需要存储emoji表情之类的 , 则将表或字段设置成utf8mb4;因为 , utf8号称万国码 , 其无需转码、无乱码风险且节省空间 , 而utf8mb4又向下兼容utf8 。
3、设计数据库时所有表和字段必须添加注释
使用Comment从句添加表和列的备注 , 或直接在数据库连接工具的注释栏添加注释 , 从项目开始就进行数据字典的维护 。
使用Comment从句添加注释如:
-- 1、创建表:
CREATE TABLE t1(id varchar2(32) primary key,name VARCHAR2(8) NOT NULL,age number);-- 2、添加表注释:
Comment on table t1 is '个人信息';-- 3、添加字段注释:
comment on column t1.id is 'id';comment on column t1.nameis '姓名';comment on column t1.age is '年龄';使用数据库连接工具添加注释:
【MySQL使用规范手册,程序员必知必会】4、单个表的数据量大小控制在500万以内
尽量控制单表数据量的大小 , 建议控制在500万以内;500万并不是MySQL数据库的极限 , 但数据量太多不利于对表结构进行修改、备份和恢复数据 , 适当采用分库分表等手段来控制单表数据量的大小 。
5、使用MySQL分区表需谨慎
分区是将一个表的数据按照某种方式 , 比如按照时间上的月份 , 分成多个较小的 , 更容易管理的部分 , 但是逻辑上仍是一个表;分区表在物理上表现为多个文件 , 在逻辑上仍表现为同一个表 , 需要谨慎选择分区键;跨分区查询效率可能会更低 , 建议使用物理分区表等方式管理大数据 。
6、尽量满足冷热数据分离 , 减小表等宽度
MySQL限制每个表最多存储4096列 , 并且每一行数据的大小不超过65535字节 , 为了减少磁盘IO线程的开销 , 就要适当控制表的宽度 , 因为表越宽 , 把表装载进内存缓冲池时所占用的内存也就越大 , 就会消耗更多的IO线程;除此之外 , 为了保证热数据的内存缓存命中率 , 更有效的利用缓存 , 避免读入无用的冷数据 , 尽量把经常使用到的列放到同一个表中 , 避免不必要的关联操作 。
7、建立预留字段需谨慎
部分友人在设计数据库表时 , 不仅设计了当前所需要的字段 , 而且还在其中留出几个字段作为备用 。比方说 , 我设计了一个人员表(Person) , 其中已经添加了各种必要的字段 , 包括姓名(Name)、性别(Sex)、出生年月日(birthday)等等;


推荐阅读