mysql性能优化之数据类型(持续更新)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 总结一下常用的数据类型创建的注意事项,后期会持续更新。

总结一下常用的数据类型创建的注意事项,后期会持续更新。

1.对于主键id使用bigint还是int?

2.创建表字段时,选择null还是not null?

3.IP地址使用varchar数据类型存放?

4.字符串存储使用char还是varchar?


1.对于主键id使用bigint还是int?


 mysql中最常见的需求是创建表时将主键id设置为自增,那问题来了,使用bigint好还是int好呢。如果单纯从磁盘占用空间大小角度来讲,使用int要优于bigint。因为bigint为8字节,int为4字节。对于无符号型的int类型来讲,int能表示的最大范围可以到2^32大概是43亿,一般的业务场景中,单表的数据量一般是在千万级别,所以对于大部分的业务场景来讲,43亿算是够用了。另外在来讲磁盘存储空间问题,8字节要比4字节占用空间更大,就好比是房间里面放一升水,本来用2L的水桶就可以,但是用4L的水桶去盛放势必占用的空间更大,毕竟房间大小是一定的,磁盘空间同理。


2.创建表字段时,选择null还是not null?


先看官方文档关于null的介绍:

NULL columns require additional space in the rowto record whether their values are NULL. For MyISAM tables, each NULL columntakes one bit extra, rounded up to the nearest byte.

翻译:

   NULL列在行中需要额外的空间以记录其值是否为NULL。 对于MyISAM表,每个NULL列都多花一位,四舍五入到最接近的字节。可以简单理解为别用null。

   另外字段中如果存在null,可能会导致统计查询出现数据不准确、运算异常问题,具体说明可以参考:

mysql中null引发的错误案例说明以及处理方案

所以在创建表字段时,没有特殊要求还是老老实实使用not null。


3.IP地址使用varchar数据类型存放?


 IP地址格式:IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。也就是说使用varchar数据类型存放时,最长15位就可以满足。对应字节数应该需要占用16个字节(varchar需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,否则使用2个字节。一个varchar(10)的列需要11个字节的存储空间。varchar(1000)的列则需要1002个字节,因为需要2个字节存储长度信息)。

   在实际存储时可以使用int进行存储ip地址对应的数值(通过INET_ATON函数转化),获取ip地址的时候使用INET_NTOA函数(ip地址数值类型转化为字符串)。使用int存储仅占用4字节,相对于字符串能节省3/4的磁盘空间。ip地址数据类型转化如下:

SET @ip='127.0.0.2';
SELECT @ip,INET_ATON(@ip) str_to_i,INET_NTOA(INET_ATON(@ip)) i_to_str;

执行结果:

4dc45a746e94f7305f6b120acec39a0c_5a2387e3291544bc878e535bae4ea982.png

4.字符串存储使用char还是varchar?


执行效率:char优于varchar.

char(n)和varchar(n)中的n表示的是字符长度,char支持的最大长度是255,varchar支持的最大长度是65535.如果存储的字符串长度超过设置的n的大小,会提示:

Data too long for column 'xxx'

对于固定长度的字段信息选择char,比如说:手机号、md5值等;长度可变的字段信息选择varchar.比如说地址、评论信息。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL 核心知识与性能优化全解析
我整理的这份内容涵盖了 MySQL 诸多核心知识。包括查询语句的书写与执行顺序,多表查询的连接方式及内、外连接的区别。还讲了 CHAR 和 VARCHAR 的差异,索引的类型、底层结构、聚簇与非聚簇之分,以及回表查询、覆盖索引、左前缀原则和索引失效情形,还有建索引的取舍。对比了 MyISAM 和 InnoDB 存储引擎的不同,提及性能优化的多方面方法,以及超大分页处理、慢查询定位与分析等,最后提到了锁和分库分表可参考相关资料。
|
10月前
|
存储 缓存 负载均衡
mysql的性能优化
在数据库设计中,应选择合适的存储引擎(如MyISAM或InnoDB)、字段类型(如char、varchar、tinyint),并遵循范式(1NF、2NF、3NF)。功能上,可以通过索引优化、缓存和分库分表来提升性能。架构上,采用主从复制、读写分离和负载均衡可进一步提高系统稳定性和扩展性。
112 9
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
1473 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
11月前
|
关系型数据库 MySQL 数据库
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
133 5
|
11月前
|
存储 关系型数据库 MySQL
MySQL支持多种数据类型
MySQL支持多种数据类型
258 4
|
11月前
|
存储 关系型数据库 MySQL
MySQL数据类型
MySQL数据类型
130 3
|
11月前
|
存储 关系型数据库 MySQL
什么是mysql的数据类型?
什么是mysql的数据类型?
133 2
|
存储 关系型数据库 MySQL
mysql-性能优化(一)
mysql-性能优化(一)
|
关系型数据库 MySQL 数据处理
针对MySQL亿级数据的高效插入策略与性能优化技巧
在处理MySQL亿级数据的高效插入和性能优化时,以上提到的策略和技巧可以显著提升数据处理速度,减少系统负担,并保持数据的稳定性和一致性。正确实施这些策略需要深入理解MySQL的工作原理和业务需求,以便做出最适合的配置调整。
1272 6
|
11月前
|
存储 关系型数据库 MySQL
MySQL性能优化实践指南
【10月更文挑战第16天】MySQL性能优化实践指南
727 0

推荐镜像

更多