【MySQL 进阶】 选择优化的数据类型

推荐阅读


MySQL 支持的类型非常多,选择正确且合适的类型对于获得高性能非常重要。下面有简单的几个原则可以对选择合适的数据类型留下参考依据。

1. 更小的通常更好

一般情况下,应该尽量使用可以正确存储数据的最小数据类型,例如只需要存储0-200,使用tinyint unsigned 比int是更好地选择。更小的数据类型通常更快,占用内存和CPU资源更少,以及处理数据时间更短。

2. 简单更好

简单的数据类型通常更快地处理,同时占用更少的CPU。例如整型数据比字符串数据操作的代价更低。因为字符集和排序规则的存在,使得处理字符串比整理更加的复杂。
例如:使用MySQL的内建类型 date,time等时间类型就比使用字符串能够获取到更高的性能,另外使用整型数据存储IP地址,往往比使用字符串存储形如xxx.xxx.xxx.xxx 格式的IP地址效果更好。

3. 尽量避免使用NULL

在我们创建数据表的时候,通过有些列是默认为NULL的(TimeStamp例外),但是通常从业务上来说这些字段资源不会保存NULL的状态,这时候指定列为NOT NULL通常是更好地选择,除非真的需要存储NULL。
如果查询的列中包含NULL,MySQL更难对其作出优化。可为NULL的列,通常索引,索引统计以及和值都比较复杂,可为NULL的列会使用更多的存储空间,NULL值在MySQL中也需要被特殊处理。

同时将列设置为NULL,对于性能的提升不是特别的大,在调优的时候没有必要首先排除这种情况的,除非确认其会导致异常情况。如果计划在列上创建索引,那么就应该避免将此列设置为允许为NULL。

4. 总结

在为列选择数据类型的时候,第一步需要确定合适的大类型,数字,字符串,时间等。然后下一步在选择合适的数据类型很多MySQL的数据类型可以允许存储相同的数据类型和只是存储的精度和以及范围不一致,或者需要的物理空间不同。
另外MySQL提供了很多类型的别名,如INTEGER、BOOL以及NUMERIC类型,他们都是别名,但是创建过之后,使用SHOW CREATE TABLE 命令之后检查,会发现 MySQL 报告的是基本类型而非别名。例如下面的例子:

DROP TABLE IF EXISTS `alias_example`;
CREATE TABLE IF NOT EXISTS `alias_example`
(
    `id`       BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
    `age`      INTEGER NOT NULL,
    `is_adult` BOOL DEFAULT FALSE
);

创建完成之后,使用show creat table 查询语句,可以看到其类型为基本类型,而非别名。

SHOW CREATE TABLE `alias_example`;

-- 输出结果

CREATE TABLE `alias_example` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `age` int(11) NOT NULL,
  `is_adult` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值