美文网首页
字段选择

字段选择

作者: code_nerd | 来源:发表于2017-10-27 09:41 被阅读0次

    字段选择的基本规则

    • 更小的通常更好,同类型字段,尽量选择占用更小的存储空间的,更小的字段通常速度更快,因为占用更少的硬盘空间,内存空间和cpu资源。 若tinyint 满足条件 则不选择int
    • 简单更好,多个数据类型满足的情况下,选择更简单的类型。更简单的类型可以减少cpu的处理时间。 如数字型会比字符串更加有优势
    • 尽量避免null, 如果字段中允许null的话,mysql很难去优化查询,因为所建立的索引会更加复杂

    整数型

    整数型包含了 tinyint、smallint、mediumint、int 和 bigint,分别是2的8、16、24、32、64位存储空间
    signed 和unsigned 使用相同的空间,
    int(1)和int(20)是占用一样的空间,并且作用是一样的。只是会在一些mysql的交互工具上显示不同而已。

    实数类型

    实数型包含float、double、decimal,decimal可以用来存储bigint存储不下的数字
    float和double只能提供近似的值,如要存储精确的小数则需要使用decimal来处理
    因为decimal占用的空间较大,如数字大小并不大,则可以使用将小数部分乘以百万 转为bigint存储

    字符串类型

    varchar

    varchar是变长字符串,使用1到2位来存储长度,当字符串长度不大于255时使用1位
    varchar对性能的提升是因为它是变长的,但当你更新它时需要进行额外的工作
    对于varchar 尽量使用符合条件 更短的长度。 长度大时,mysql需要消耗更多的内存去处理,mysql在内部处理时,总是将varchar转为定长字符串。尤其在filesort,临时表和排序时,对性能影响更大
    使用场景

    • 当字符串的最大长度远大于字符串的平均长度
    • 字段的更新很少,频繁的更新会导致页分裂
    • 使用复杂的字符集

    char

    char是定长字符串
    使用场景

    • 当你存储很短的字符串时,char是非常好用的,例如存储md5后的值
    • 存储的值经常需要更新

    char会自动将字符串结尾的空格去掉,而varchar则不会

    text 和 blob

    text和blob可以存储大量的字符串和数字,text具有字符集而blob不具有字符集
    text有 tinytext、text、mediumtext和longtext
    blob有tinyblob、smallblob、blob、mediumblob和longblob

    时间类型

    datetime类型

    yyyy-mm-dd hh:mm:ss
    datetime 类型时间和时区无关 占用8个字节存储空间

    timestamp 实际上是以int 1970年-2038年

    存储1970年1月1日到当前时间的秒数,以yyyy-mm-dd hh:mm:ss显示,占用4个字节
    显示依赖于指定时区
    在行修改时,可以自动修改timestamp值

    date类型 只用3个字节

    只存储日期,可以利用日期时间函数进行计算

    time类型

    只存储时间数据,hh:mm:ss

    不要使用字符串来存储时间日期

    相关文章

      网友评论

          本文标题:字段选择

          本文链接:https://www.haomeiwen.com/subject/gmcrpxtx.html