简单了解mysql存储字段类型查询效率

  

检索性能从快到慢的是(此处是听人说的):

  
      <李>第一:非常小的整数,smallint mediumint, int,长整型数字   <李>第二:char、varchar李   <李>第三:零李   
  

解释(转载):

  

<强>整数类型
  

  

1,非常小的整数,SMALLINT MEDIUMINT, INT,长整型数字,分别用8、16、24、32、64存
  

  

2,整数都有未签名的可选属性(拿非常小的整数字段来举例,无符号后,字段的取值范围是0 - 255,而签署的范围是-128 - 127。那么如果我们在明确不需要负值存在的情况下,通常是不要设置签署来支持负数的)。
  

  

3,对于存储和计算来说INT(1)和INT(20)是相同的,INT (N)中N只是规定了一些交互工具来显示字符的个数

  

<强>字符类型
  

  

字符定长,存储效率不如varchar,对于短数据的查询优于varchar
  

  

固定长度的。比如使用uuid作为主键,那用char应该更合适。

  

<强>零类型
  

  

1,索引NULL列要额外的空间
  

  

2,进行比较和计算时会对空值进行处理,可能导致索引失效

  

所以尽量不要使用零类型,多使用整数类型

  

另外,时间日期数据类型
  

  

1,不要用字符串存储日期型数据,浪费空间
  

  

2,日期能保存从1001到9999年,精度为秒,他把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中,使用8字节
  

  

3,时间戳保存了从1970年以来的秒数,和Unix时间戳相同,只能保存1970年到2038年,使字用4节
  

  

4, FROM_UNIXTIME()和UNIX_TIMESTAMP()两个函数转换日期和Unix时间戳
  

  

5,日期和时间戳中存的是时间,但是是哪里的时间呢? ? ?:前者不管哪里,他就是一个时间表示(与时区无关),后者是格林尼治时间. .就是说存储时日期就按照给的时间存,时间戳则是在先根据所在时区和给的时间戳算出对应的格林尼治时间再存,访问时日期就按照他存的时间返回,时间戳则是根据存的时间戳(看作格林尼治时间)和所在时区算出所在时区的对应时间。
  

  

6,通常用时间戳、空间效率高
  

  

7, MYSQL没有提供比秒更小粒度的日期和时间值,如果需要,可以用BIGINT存储微妙级别的时间戳,或用双存储秒之后的小数部分。

  

<>强实数类型
  

  

1,金融类要用十进制
  

  

2,小数可以保存BIGINT范围外的整数
  

  

3,浮点数和双精度数使用标准的浮点运算进行近似计算

  

<强> char和varchar
  

  

1, char是定长,varchar是变长,也就是varchar节省空间(除非使用行——格式=固定创建的话)
  

  

2,因为varchar是变长的,所以更新时如果长度变长,就会做额外的工作
  

  

3,下列情况使用varchar:字符串列的最大长度比平均长度大很多,列的更新很少(所以碎片不是问题);使用了像UTF8这样的字符集(每个字符都使用不同的字节数进行存储)
  

  

4, CHAR适用情况:很短,或者所有值都接近同一个长度(如MD5);列经常变更
  

  

5,末尾空格问题:高版本varchar会保留末尾空格;char和低版本varchar会剔除末尾空格。
  

  CHAR (N)

6日,VARCHAR (N)中N表示字符数,而非字节数(中文字符在UTF8中占字用3节)
  

  

7,虽然VARCHAR (N)数据类型在磁盘中存的就是他所表示的字符串的大小,但是读取到内存中的时候内存是会给他分配N * k + 1得奖感言(其他N<=255 1; 2,) (k根据字符集决定)

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

简单了解mysql存储字段类型查询效率