Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45146
  • 博文数量: 43
  • 博客积分: 1161
  • 博客等级: 少尉
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-24 11:14
文章分类
文章存档

2011年(40)

2010年(3)

分类: Mysql/postgreSQL

2011-05-14 19:07:40

MySQL支持多种数据类型,选择正确的类型是获得高性能的关键。

  • Smaller is usually better

          选择能保证应用正确的最小数据类型。

          不要过分的低估所要存储的数据的长度,因为在应用运行之后在表的多个地方增加数据类型的长度(data type range)是非常痛苦的事情。

  • Simple is good

          尽可能选择简单的数据类型,这样更节省CPU。

          如整数(interger)就比字符(character)要简单。

          两个简单的例子:存储日期时,使用MySQL内置的DATETIME类型比用字符串类型要好;用整形存储IP信息比用字符串好。

  • Aviod NULL if possible

          尽可能避免在数据库中存放NULL

          尽可能在对所有字段都做NOT NULL约束,除非是真的打算存储NULL

          对MySQL来说,很难优化可以为NULL的列——构造索引、索引统计和数据比较的时候更加复杂——存储的时候需要额外的空间并需要MySQL对其做特殊的处理。例如,在MyISAM引擎的表中,对可以为NULL的列加索引,每一项都需要额外的存储空间,并且使得索引变成变长索引——定长索引用整形存储,效率更高。

          如果实在需要有NULL的存在,也可以考虑用“0”戒者空字符串来代替。

          但是,把NULL-ABLE的列转换为NOT NULL所带来的性能提升也是有限的。所以,对于已经运营的应用,并不强制化大代价去做这样的优化。只是,如果是从头开始设计表的Schema,推荐使用这样的优化设计。

MySQL首先把数据分成了若干大类,如时间类型、数值类型和字符类型等。然后又在这些大类中细分了若干子类,如时间类型又分类DATETIMETIMESTAMP

列数据类型的选择步骤是,首先确定使用哪一种大类,然后再选择合适的子类。

不同子类适用于不同的引用类型。如同样是时间类型,DATETIME适用于做展示,而TIMESTAMP更适合做应用的内部逻辑。
阅读(209) | 评论(0) | 转发(0) |
0

上一篇:如何读慢查询日志

下一篇:数值类型

给主人留下些什么吧!~~