1、若无特殊说明,建表时一律采用 Innodb 存储引擎。
选择合适的引擎可以提高数据库性能,如 InnoDB 和 MyISAM,InnoDB 和 MyISAM 是许多人在使用 MySQL 时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定;
基本的差别为:MyISAM 类型不支持事务处理等高级处理,而 InnoDB 类型支持;MyISAM 类型的表强调的是性能,其执行数度比 InnoDB 类型更快,但是不提供事务支持,而 InnoDB 提供事务支持以及外部键等高级数据库功能;
因此,其支持事务处理、支持外键、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎。
2、数据库和表的字符集统一使用 UTF8
数据库和表的字符集统一使用 utf8,若是有字段需要存储 emoji 表情之类的,则将表或字段设置成 utf8mb4;因为,utf8 号称万国码,其无需转码、无乱码风险且节省空间,而 utf8mb4 又向下兼容 utf8。
3、设计数据库时所有表和字段必须添加注释
使用 Comment 从句添加表和列的备注,或直接在数据库连接工具的注释栏添加注释,从项目开始就进行数据字典的维护。
使用 Comment 从句添加注释如:
--1、创建表:
CREATETABLEt1(idvarchar2(32) primarykey,nameVARCHAR2(8)NOTNULL,agenumber);
--2、添加表注释:
Commentontablet1is'个人信息';
--3、添加字段注释:
commentoncolumnt1.idis'id';
commentoncolumnt1.nameis'姓名';
commentoncolumnt1.ageis'年龄';
使用数据库连接工具添加注释:
4、单个表的数据量大小控制在 500 万以内
尽量控制单表数据量的大小,建议控制在 500 万以内;500 万并不是 MySQL 数据库的极限,但数据量太多不利于对表结构进行修改、备份和恢复数据,适当采用分库分表等手段来控制单表数据量的大小。
5、使用 MySQL 分区表需谨慎
分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表;分区表在物理上表现为多个文件,在逻辑上仍表现为同一个表,需要谨慎选择分区键;跨分区查询效率可能会更低,建议使用物理分区表等方式管理大数据。
6、尽量满足冷热数据分离,减小表的宽度
MySQL 限制每个表最多存储 4096 列,并且每一行数据的大小不超过 65535 字节,为了减少磁盘 IO 线程的开销,就要适当控制表的宽度,因为表越宽,把表装载进内存缓冲池时所占用的内存也就越大,就会消耗更多的 IO 线程;除此之外,为了保证热数据的内存缓存命中率,更有效的利用缓存,避免读入无用的冷数据,尽量把经常使用到的列放到同一个表中,避免不必要的关联操作。
7、建立预留字段需谨慎
部分友人在设计数据库表时,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用。比方说,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓名(Name)、性别(Sex)、出生年月日(birthday)等等;
为了以防万一,比如之后可能 Person 表会涉及到毕业院校、工作单位、是否婚配和相片等信息,于是就加入 5 个 varchar2 型的字段,分别叫做 Text1、Text2……Text5;这一手操作看似防范于未然,其实也并不见得,因为大量预留字段会浪费空间、预留字段不能做到见名知意、预留字段无法确认存储的数据类型且修改其字段类型还可能会造成锁表等问题。
针对此等情况可以参考以下两点解决方案:
如果数量很少,而且信息的性质与原表密切相关,那么就可以直接在原表上增加字段,并将相关的数据更新进去;
如果数量较大,或者并非是原表对象至关重要的属性,那么就可以新增一个表,然后通过键值连接起来;
8、数据库中禁止存储图片、文件等大的二进制数据
若往数据库表中存储文件,而文件通常很大,当数据库进行读取操作时,会进行大量的随机 IO 操作,大文件使得 IO 操作很耗时耗性能,造成短时间内数据量快速增长;所以,通常将图片、文件存储在文件服务器中,数据库只用于存储文件地址信息。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.