Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?( 三 )


但是如果业务逻辑OK的情况下 , 单表数据量控制在 500万以内更加合适 。
以此表为例子 , 当数据在300万的时候 , 备份的sql文件是2G左右大小 。500万+ 的数据库备份文件会更大一些 , 这样的话 , 还要考虑备份的时间和效率问题 。切记一定要做读写分离 , 并且在从库上做数据备份操作 。
结论:tinyint 和 char 的效率非常接近 , 但是在维护和逻辑理解上 , char更加直观 , 建议使用char 又因为 varchar 的查询效率高于 char 所以 , 都用 varchar吧 。
使用bigint  , tinyint 还是使用char , varchar ?测试表结构:
CREATE TABLE `test_big_char` (`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '测试的ID',`bigint_num` bigint(20) DEFAULT NULL COMMENT 'bigint数据',`char_num` char(20) DEFAULT NULL COMMENT 'char数据',`varchar_num` varchar(20) DEFAULT NULL COMMENT 'varchar数据',`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`tb_status` char(50) DEFAULT '正常' COMMENT '状态:正常 , 正常;删除 , 删除;',PRIMARY KEY (`user_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; 
select count(*) from test_big_char;耗时1.3秒 , 400万数据量级

Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?

文章插图
查询
根据主键进行简单查询 , 速度非常快 。400万数据量级
Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?

文章插图
查询
select * from test_big_char where bigint_num = 6616351006811;耗时:2.4秒  , 400万数据量级
增加索引之后 , 耗时:0.01秒
切换其他值查询 , 耗时:0.00秒 , 带索引 , 400万数据量级
select * from test_big_char where char_num = '6616351006811';耗时:2.87秒  , 400万数据量级
增加索引之后 , 耗时:0.00秒
select * from test_big_char where varchar_num = '6616351006811';耗时:2.28秒  , 400万数据量级
增加索引之后 , 耗时:0.00秒
切换其他值进行查询 , 耗时:0.00秒 , 带索引 , 400万数据量级
Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?

文章插图
查询
第二次查询情况
Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?

文章插图
查询
第三次查询 , 因为 char 查询最慢 , 所以之做 bigint 和 varchar 的比较:
Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?

文章插图
查询
在没有索引的情况下 , varchar和bigint 的查询效率几乎相同  , 400万数据量级 。
增加索引之后:
Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?

文章插图
增加索引
那么接下来测试 大于 , 小于 的各种情况 , 实际测试 char和varchar 得到的结果不准确 , 需要加其他限定条件 , 但就数据库查询而言 , varchar的查询效率最高 。
Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?

文章插图
比较
为了避免执行先后顺序问题 , 再执行一次顺序不一样的 。
Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?

文章插图
结果
还测试了许多其他的内容 , 就不再一一记录了 , 感兴趣可以自己操作一遍 。
晚点将会把生成数据的代码发出来 , 分享给想要测试的小伙伴 , 如果感觉有用 , 请关注并转发 , 谢谢!




推荐阅读