专业的编程技术博客社区

网站首页 > 博客文章 正文

MySQL数据库设计基本规范(mysql数据库的设计与实现)

baijin 2024-10-13 01:10:58 博客文章 16 ℃ 0 评论

1.所有表必须使用Innodb储存引擎

MySQL5.5之前MyIsam是默认存储引擎,5.6以后默认的引擎是Innodb

它支持事务,行级锁,有更好的恢复性,高并发下性能更好

当然Innodb无法满足列储存和空间数据

2.数据库和表的字符集统一使用UTF-8

UTF-8兼容性更好

统一字符集可以避免由于字符集转换产生的乱码

对不同字符集的比较操作,比较前会进行字符集的转换,所以使得列上的索引失效,带来性能问题

MySQL中UTF-8字符集汉字占3个字节,ASCII码占用1个字节

3.所有表和字段都需要添加注释

使用comment从句添加表和列的备注

从一开始就进行数据字典的维护

4.尽量控制单表数据量的大小,建议控制在500万以内

500万并不是MySQL数据库的限制,MySQL并没有对单表最大储存设置限制。限制取决于储存设置和文件系统(32位系统单个文件最大不能超过2G)

可以用历史数据归档,分库分表等手段来控制数据量的大小

历史数据归档主要用于日志文档(增长迅速),分库分表用于业务上

5.谨慎使用Mysql分区表

分区表在物理上表现为多个文件,在逻辑上表现为一个表

分区表大家误认为储存在不同的物理文件中,可以更好的利用磁盘的IO。实际上分区表 的不同分区文件最好储存在不同的磁盘阵列上。而我们把所有分区文件放在一起,IO性能优化的效果并不能那么好。

谨慎选择分区键,跨分区查询效率可能更低

建议采用物理分表的方式管理大数据

6.尽量做到冷热数据分离,减少表的宽带

减少磁盘的IO,保证热数据的内存缓存命中率

更有效的利用缓存,避免读入无用的冷数据

经常一起使用的列放到一张表

Mysql每个表限制最多储存4096列,并且每一行的数据大小不能超过65535字节

表越宽,把表装入内存缓存池占用内存也就越大,消耗更多的IO

Select * ---》读入无用的冷数据

垂直拆分

对于目前的mysql,修改一个字段的成本远远大于增加一个字段

7.禁止在表中建立预留字段

预留字段的命名很难做到见名识义

预留字段无法确定储存的数据类型,所以无法选择合适的类型

对预留字段类型的修改,会对表进行锁定

8.禁止在数据库中储存图片,文件等二进制数据

9.禁止在线上做数据库的压力测试

10.禁止从开发环境,测试环境直连生产环境数据库

11. 尽量非空

所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary、varbinary外,必须有默认值。字符型的默认值为一个空字符值串’’;数值型的默认值为数值0;逻辑型的默认值为数值0;

其中:系统中所有逻辑型中数值0表示为“假”;数值1表示为“真”。

datetime、smalldatetime类型的字段没有默认值,必须为NULL。

12. 建议在大多数表中(如工作单),应都有以下字段:

字段名说明类型默认值

CreatorID 创建者 int 默认值为0

CreatedTime 创建时间 Datetime 默认值为NULL

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表