MySQL 选择合适的数据类型

char 与 varchar

  1. char 属于固定长度的字符类型,而 varchar 属于可变长度的字符类型

  2. 检索时 char 会删除尾部的空格

  3. 不同存储引擎使用建议

    MyISAM:char

    MEMORY:char

    InnoDB:varchar

text 与 blob

  1. 二者的主要差别是 blob 能用来保存二进制数据,而 text 只能保存字符数据

  2. blob 和 text 值会引起一些性能问题,特别是在执行了大量的删除操作时

    删除操作会在数据表中留下很大的空洞,以后填入这些空洞的记录在插入的性能上会有影响。微了提高性能,建议定期使用 optimize table 功能对这类表进行碎片整理,避免因为空洞导致性能问题

  3. 可以使用合成的(Synthetic)索引来提高大文本字段的查询性能

    合成索引就是根据大文本字段的内容建立一个散列值,并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了。但是,要注意这种技术只能用于精确匹配的查询。可以使用 md5()sha1(),或 crc32() 函数生成散列值

  4. 在不必要的时候避免检索大型的 blob 或 text 值

  5. 把 blob 或 text 分离到单独的表中

浮点数和定点数

  1. 浮点数一般用于表示含有小数点的数值。当一个字段被定义为浮点类型后,如果插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值
  2. 定点数是以字符串形式存放的,所以定点数可以更精确的保存数据
  3. 浮点数会产生误差,避免与浮点数的比较

日期类型选择

  1. 根据实际需要选择能够满足应用的最小存储的日期类型
  2. 如果要记录年月日时分秒,并且记录的年份比较久远,那么最好使用 datetime,而不要使用 timestamp。因为 timestamp 表示的日期范围比 datetime 要短的多
  3. 如果记录的日期需要让不同时区的用户使用,那么最好使用 timestamp,因为日期类型中只有它能够和实际的时区相对应

你可能感兴趣的:(MySQL 选择合适的数据类型)