深入浅出MySQL 第八章 选择合适的数据类 笔记

第八章 选择合适的数据类型

CHAR与VARCHAR

CHAR:

  • 固定长度,处理速度快
  • 浪费空间
  • 需要对行尾空格进行处理

应用场景:长度变化不大并且对查询速度有较高要求的数据

不同引擎下的选择

  • MyISAM 存储引擎:建议使用CHAR
  • MEMORY 存储引擎:皆可。两者都是作为 CHAR 类型处理
  • InnoDB 存储引擎:建议使用 VARCHAR

TEXT与BLOB

注意:在执行了大量的删除操作时,删除操作会在数据表中留下很大的“空洞”。为了提高性能,建议定期使用 OPTIMIZE TABLE 功能对这类表进行碎片整理,避免因为“空洞”导致性能问题。

  • 可以使用合成的(Synthetic)索引来提高大文本字段(BLOB 或TEXT)的查询性能。合成索引就是根据大文本字段的内容建立一个散列值,并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了。但是,要注意这种技术只能用于精确匹配的查询
  • 在不必要的时候避免检索大型的 BLOB 或 TEXT 值。避免“SELECT *”的出现
  • 把 BLOB 或 TEXT 列分离到单独的表中。

浮点数与定点数

区别:

  • 当一个字段被定义为浮点类型后,如果插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值,然后插入,四舍五入的过程不会报错
  • 定点数是以字符串形式存放的,可以更加精确的保存数据。如果实际插入的数值精度大于实际定义的精度,则 MySQL 会进行警告

原则:

  • 浮点数存在误差问题
  • 对货币等对精度敏感的数据,应该用定点数表示或存储
  • 在编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较
  • 要注意浮点数中一些特殊值的处理

日期类型选择

  • 根据实际需要选择能够满足应用的最小存储的日期类型
  • 如果要记录年月日时分秒,并且记录的年份比较久远,那么最好使用 DATETIME
  • 如果记录的日期需要让不同时区的用户使用,那么最好使用 TIMESTAMP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章