本篇文章小编给大家分享一下简单了解mysql存储字段类型查询效率,文章介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
检索性能从快到慢的是:
第一:tinyint,smallint,mediumint,int,bigint
第二:char,varchar
第三:NULL
解释:
整数类型
1、TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,分别用8,16,24,32,64存
2、整数都有UNSIGNED可选属性 (拿tinyint字段来举例,unsigned后,字段的取值范围是0-255,而signed的范围是-128 - 127。 那么如果我们在明确不需要负值存在的情况下,通常是不要设置signed来支持负数的。)
3、对于存储和计算来说INT(1)和INT(20)是相同的,INT(N)中N只是规定了一些交互工具来显示字符的个数
字符类型
char定长,存储效率不如varchar,对于短数据的查询优于varchar
固定长度的。比如使用uuid作为主键,那用char应该更合适。
NULL类型
1、索引NULL列要额外的空间
2、进行比较和计算时会对null值进行处理,可能导致索引失效
所以尽量不要使用NULL 类型,多使用整数类型
另外,时间日期数据类型
1、不要用字符串存储日期型数据,浪费空间
2、DATE能保存从1001到9999年,精度为秒,他把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中,使用8字节
3、TIMESTAMP保存了从1970年以来的秒数,和Unix时间戳相同,只能保存1970到2038,使用4字节
4、FROM_UNIXTIME()和UNIX_TIMESTAMP()两个函数转换日期和Unix时间戳
5、DATE和TIMESTAMP中存的是时间,但是是哪里的时间呢???:前者不管哪里,他就是一个时间表示(与时区无关),后者是格林尼治时间。。就是说存储时DATE就按照给的时间存,TIMESTAMP则是在先根据所在时区和给的时间戳算出对应的格林尼治时间再存,访问时DATE就按照他存的时间返回,TIMESTAMP则是根据存的时间戳(看作格林尼治时间)和所在时区算出所在时区的对应时间。
6、通常用TIMESTAMP,空间效率高
7、MYSQL没有提供比秒更小粒度的日期和时间值,如果需要,可以用BIGINT存储微妙级别的时间戳,或用DOUBLE存储秒之后的小数部分。
实数类型
1、金融类要用DECIMAL
2、DECIMAL可以保存BIGINT范围外的整数
3、FLOAT和DOUBLE使用标准的浮点运算进行近似计算
char 和 varchar
1、char是定长,varchar是变长,也就是varchar节省空间(除非使用ROW——FORMAT=FIXED创建的话)
2、因为varchar是变长的,所以UPDATE时如果长度变长,就会做额外的工作
3、下列情况使用varchar:字符串列的最大长度比平均长度大很多;列的更新很少(所以碎片不是问题);使用了像UTF8这样的字符集(每个字符都使用不同的字节数进行存储)
4、CHAR适用情况:很短,或者所有值都接近同一个长度(如MD5);列经常变更
5、末尾空格问题:高版本varchar会保留末尾空格;char和低版本varchar会剔除末尾空格。
6、CHAR(N),VARCHAR(N)中N表示字符数,而非字节数(中文字符在UTF8中占用3字节)
7、虽然VARCHAR(N)数据类型在磁盘中存的就是他所表示的字符串的大小,但是读取到内存中的时候内存是会给他分配N*k+1or2(N<=255,1;else 2;)(k根据字符集决定)
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整