前段时间看了《高性能MysqL》中的选择优化的数据类型,这里主要是做一下笔记。
一般情况下,应该尽量使用可以正确存储数据的最小数据类型。例如只需要存 0~200,tinyint unsigned 更好。更小的数据类型通常更快,因为它们占用更少的磁盘、内存和 cpu 缓存,并且处理时需要的 cpu 周期也更少。简单数据类型的 *** 作通常需要更少的 cpu 周期。例如,整型比字符 *** 作代价更低,因为字符集和校对规则(排序规则)使字符比较 比 整型比较更复杂。这里有两个例子:一个是应该使用 MysqL 内建的类型(date,time,datatime)而不是字符串来存储日期和时间,另一个是应该用无符号整型存储 IP 地址。通常情况下最好指定列为 NOT NulL,除非真的需要存储 NulL 值。如果查询中包含可为 NulL 的列,对 MysqL 来说更难优化,因为可为 NulL 的列使得索引、索引统计和值比较都更复杂。特别是计划在列上建索引,就应该尽量避免设计成可为 NulL 的列。<h2 ID="%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%B1%BB%E5%9E%8B%EF%BC%9A">字符串类型:
<h3 ID="varchar%20%E5%92%8C%20char%20%E7%B1%BB%E5%9E%8B">varchar 和 char 类型
<h3 ID="blob%20%E5%92%8C%20text%20%E7%B1%BB%E5%9E%8B">blob 和 text 类型
blob 和 text 都是为了存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。与其它类型不同,MysqL 把每个 blob 和 text 值当作一个独立的对象处理。blob 和 text 家族之间仅有的不同是 blob 类型存储的是二进制数据,没有排序规则或字符集,而 text 类型有字符集和排序规则。memory 引擎不支持 blob 和 text 类型。<h3 ID="%E6%9E%9A%E4%B8%BE%EF%BC%88enum%EF%BC%89%E7%B1%BB%E5%9E%8B">枚举(enum)类型
MysqL 在内部会将每个值在列表中的位置,并且在表的 .frm 文件中保存 “数字-字符串” 映射关系的 “查找表”。枚举字段是按照内部存储的整数而不是定义的字符串进行排序的。MysqL 能存储的最小时间粒度为秒。datetime 保存范围从 1001 年到 9999 年,精度为秒。与时区无关。使用 8 字节的存储空间。timestamp 类型保存了从 1970 年 1 月 1 日 午夜(格林尼治标准时间)以来的秒数,它和 unix 时间戳相同。使用 4 字节的存储空间,范围从 1970 年到 2038 年。与时区有关。MysqL 4.1 以及更新的版本按照 datetime 的方式格式化 timestamp 的值,这仅仅是显示格式上的区别,timestamp 的存储格式在各个版本都是一样的。除了特殊行为之外,通常也应该尽量使用 timestamp ,因为它比 datetime 空间效率更高。有时候人们会将 unix 时间戳存储为整数值,但这不会带来任何收益。用整数保存时间戳的格式通常不方便处理,所以我们不推荐这么做。(对于这点很多公司项目中是用整数存储,我也查了资料,使用整数的理由一般是日期比较,计算时整数更好处理) 总结以上是内存溢出为你收集整理的《高性能MySQL》笔记——MySQL建表数据类型的选择全部内容,希望文章能够帮你解决《高性能MySQL》笔记——MySQL建表数据类型的选择所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)