专注Java教育12年 全国咨询/投诉热线:400-8080-105

首页 hot资讯 MySql数据类型优化详解

MySql数据类型优化详解

更新时间:2021-01-08 17:36 来源:动力节点 浏览166次

MySQL作为目前最流行的关系型数据库管理系统之一,其本身或者在工作的过程中还是存在一些缺陷的,这就需要我们进行优化工作。而在优化工作中,我们很容易忽视一些小的细节,比如说数据类型。本文我们就来讲一讲MySql数据类型优化

 

我们都知道选择数据类型只要遵循小而简单的原则就好,越小的数据类型通常会更快,占用更少的磁盘、内存,处理时需要的CPU周期也更少。越简单的数据类型在计算时需要更少的CPU周期,比如,整型就比字符操作代价低,因而会使用整型来存储ip地址,使用DATETIME来存储时间,而不是使用字符串。我们可以根据以上的规则来制定MySql数据类型优化的方案。

1.通常来说把可为NULL的列改为NOT NULL不会对性能提升有多少帮助,只是如果计划在列上创建索引,就应该将该列设置为NOT NULL。

 

2.对整数类型指定宽度,比如INT(11),没有任何卵用。INT使用32位(4个字节)存储空间,那么它的表示范围已经确定,所以INT(1)和INT(20)对于存储和计算是相同的。

 

3.UNSIGNED表示不允许负值,大致可以使正数的上限提高一倍。比如TINYINT存储范围是-128 ~ 127,而UNSIGNED TINYINT存储的范围却是0 - 255。

 

4.通常来讲,没有太大的必要使用DECIMAL数据类型。即使是在需要存储财务数据时,仍然可以使用BIGINT。比如需要精确到万分之一,那么可以将数据乘以一百万然后使用BIGINT存储。这样可以避免浮点数计算不准确和DECIMAL精确计算代价高的问题。

 

5.TIMESTAMP使用4个字节存储空间,DATETIME使用8个字节存储空间。因而,TIMESTAMP只能表示1970 - 2038年,比DATETIME表示的范围小得多,而且TIMESTAMP的值因时区不同而不同。

 

6.大多数情况下没有使用枚举类型的必要,其中一个缺点是枚举的字符串列表是固定的,添加和删除字符串(枚举选项)必须使用ALTER TABLE(如果只只是在列表末尾追加元素,不需要重建表)。

 

7.schema的列不要太多。原因是存储引擎的API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列,这个转换过程的代价是非常高的。如果列太多而实际使用的列又很少的话,有可能会导致CPU占用过高。

 

8.大表ALTER TABLE非常耗时,MySQL执行大部分修改表结果操作的方法是用新的结构创建一个张空表,从旧表中查出所有的数据插入新表,然后再删除旧表。尤其当内存不足而表又很大,而且还有很大索引的情况下,耗时更久。

 

以上就是为大家总结的MySql数据类型优化的一些方案,希望能够为我们在使用MySQL数据库时起到小小的帮助。尽管,MySQL优化对MySQL的工作效率影响不是很大,但对于程序的运行效率和数据的查询效率都有很大的提高,因此也是值得我们付诸行动去进行MySQL数据库优化工作的。在本站的MySQL教程里还有更多的MySQL数据库优化的一些细节,想学习的小伙伴抓紧时间观看教程吧!

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>

返回顶部