专栏首页乐沙弥的世界MySQL数据类型选择性能比对

MySQL数据类型选择性能比对

版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。 https://blog.csdn.net/robinson_0612/article/details/84365551

在关系型数据库建表期间,我们需要考虑很多很多的事项。诸如表存储什么数据,列上使用的数据类型,选择什么样的存储引擎等等。本文主要介绍针对表上列使用三种不同的数据类型来进行对比,以观察选择不同数据类型时,对于性能造成的影响。

一、建表时需要考虑的事项

作用:    存储什么数据? 结构:    包含什么列,需要约束吗? 存储:    每一列使用什么数据类型?需要索引吗? 引擎:    使用什么存储引擎呢? 数据筛选:    哪些列被频繁用作过滤条件?增删改查频率?

一、构造测试环境

CREATE TABLE `tb_char` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `mobile` char(11) DEFAULT NULL,
  `passwd` varchar(50) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `sex` tinyint DEFAULT NULL,
  `birthday` datetime DEFAULT NULL,
  `updated_time` datetime DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用三个表相同mobile列使用三种不同数据类型,分别为:
Char(11)
Varchar(11)
Bigint(11)

对应表名分别为:
tb_char
tb_varchar
tb_bigint
三张表总记录数100W,

测试环境:
(root@localhost) [tempdb]> show variables like 'version';
+---------------+------------+
| Variable_name | Value |
+---------------+------------+
| version | 5.7.23-log |
+---------------+------------+
select 'Leshami' author,'http://blog.csdn.net/leshami' Blog;
+---------+------------------------------+
| author | Blog |
+---------+------------------------------+
| Leshami | http://blog.csdn.net/leshami |
+---------+------------------------------+

二、基于无索引情形比对

表上统计信息,mysql统计信息不是很准确,如下图,基于bigint数据类型占用的磁盘你空间与char类型占用磁盘空间等同。varchar变长要大一些。因为varchar需要单独的字节来存放字符终止信息。

-- 下面执行以下三条SQL语句比对性能
SELECT *
FROM tb_char
WHERE mobile = '17998335908';

SELECT *
FROM tb_varchar
WHERE mobile = '17998335908';

SELECT *
FROM tb_bigint
WHERE mobile = 17998335908;

每条SQL总计执行10次,观察每条好用的平均时间,bigint性能最佳。

二、基于索引情形比对

下面为过滤条件列mobile添加索引列,观察性能表现

CREATE INDEX uk_mobile  ON tb_char(mobile);
CREATE INDEX uk_mobile  ON tb_varchar(mobile);
CREATE INDEX uk_mobile  ON tb_bigint(mobile);

如下图所示,索引占用磁盘开销是bigint数据类型最小,基于索引查询的时间,三者相当

三、基于索引列分组聚合情形比对

为了更好比对性能,下面基于索引列进行分组以及聚合运算,可以看出依旧是bigint数据类型性能最佳

四、最终比对结果及结论

最终完整结果图:

结论: 1)满足需求的前提使用更小长度的数据类型(更少磁盘占用,I/O,CPU,memory开销) 2)整型优先原则,使用简单数据类型 3)避免使用NULL字段,NULL字段很难查询优化、的索引需要额外空间、复合索引无效 4)少用text/blob,varchar的性能会比text高很多

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL性能优化(二):选择优化的数据类型

    良好的设计是高性能的基石,应该根据系统的实际业务需求、使用场景进行设计、优化、再调整,在这其中往往需要权衡各种因素,例如,数据库表究竟如何划分、字段如何选择合适...

    xcbeyond
  • MySQL(1)——数据类型的选择(一)

    ④. 结论:char 类型存储字符会剔除末尾的空格,而 varchar 存储会保留所有字符。

    凡人飞
  • 数据库MySQL-选择合适的数据类型

    1、使用可以存下你的数据的最小的数据类型。(时间类型数据:可以使用varchar类型,可以使用int类型,也可以使用时间戳类型) 2、使用简单的数据类型,in...

    cwl_java
  • MySQL调优之数据类型选择原则

    在进行数据库设计时,如果能够选择最恰当的数据类型就可以为后期的数据库调优打好最坚实的基础

    Java学习录
  • MySQL优化:选择合适的数据类型

    MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择。

    小诸葛
  • 数据库规范与数据类型选择

    NUMBER :精度最高可达20个基数-100位,相当于39或40位十进制数,具体取决于小数点的位置。

    二十三年蝉
  • DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比

    随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多。进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据...

    数据和云
  • MySql中varchar和char,如何选择合适的数据类型?

    学过MySQL的同学都知道MySQL中varchar和char是两种最主要的字符串类型,varchar是变长的类型,而char是固定长度。那关于如何选择类型就成...

    java之旅
  • 数据库性能评测:整体性能对比

    随着版本升级,关系型数据库和缓存数据库整体性能比之前都有大幅度的提升,衡量数据库性能的三个重要指标是:数据库吞吐量(QPS)、延迟时长(Latency)和稳定性...

    李俊飞

扫码关注云+社区

领取腾讯云代金券