MySQL数据类型及其优化(2)

291 阅读4分钟

这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战

猫和老鼠.jpg

前言:   本篇文章 是我关于MySQL的第23篇文章,水平一般、能力有限。文章写的比较浅,适合新手来看。本篇文章继续介绍MySQL数据类型及其优化。

影响参数

我们在建表的时候要设计字段的类型,一般来说表字段包含这几个方面。

  • 数据类型
  • 最大长度
  • 是否非空
  • 唯一约束
  • 索引
  • 默认值
  • 备注

数据类型、最大长度、非空、索引这些都是可以影响我们默认的查询速度和存储空间大小的。

数据类型

整数类型

TINYINT1 byte(-128,127)(0,255)小整数值
SMALLINT2 bytes(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值

它们的范围是-2的(n-1)次方到2的(n-1)次方-1。

在设计数据库表的字段类型时,整数类型一般可以是:类型(长度) UNSIGNED AUTO_INCREMENT

长度:
其实此长度是MySQL数据库给客户端展示的长度。比如说int(2),你实际是可以插入 123这个数字的。然后列中其实也是存储为123。但是客户端在查询时,只展示前两位:12

UNSIGNED:
表示该整数非负数,可以将整数的负数的长度增加到正数上来。一般经常使用该字段。

AUTO_INCREMENT:
表示该字段用于自增,一般是用在主键上。当然不是主键也可以。一张表只能有一列是自增的。  

浮点类型

FLOAT4 bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值
DOUBLE8 bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

      类似于JAVA中的浮点型,mysql中也有此种数据类型。

我们在进行表数据设计时,如果遇到金额的情况一般不适用浮点来存储。可以用整数类型来存储,比如说最小金额是1分。那么用bigint来存储,1表示1分。这样计算等不会出现丢失精度的问题。

字符串类型

MySQL支持多种字符串类型,每个字符串列可以定义自己的字符集和排序规则,或者说校对规则,这些东西很大程度上影响性能。

VARCHAR

用于存储可以自行改变长度的字符串,字符串长度不一致时比定长字符串省一些空间。并且能自动去除末尾空格。

虽然它是比较省空间的,但是在遇到字符串长度确定时。一般还是用定长字符串。例如身份证号,手机号等。

CHAR

固定长度的字符串,不论是否占满该长度,都会使用到固定长度的空间。所以一般不适合存储参差不齐的长度的字符串,比较浪费。

BLOB和TEXT类型

BLOB和TEXT类型一般用于存储长数据,在单独存储时最好将此列单独拿出来储存。这样在查询时不会影响主表的性能,如果需要的话关联进行查询即可。