高性能MySQL–Schema与数据类型优化

  •   
  • 899
  • mysql
  • 34
  • dodobook
  • 2017/03/03

MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。选择优化的数据类型原则:1.更小的通常更好.2简单就好。3.尽量避免Null值.

整数类型:TINTINT,SMALLINT,MEDIUMINT,INT,BIGINT分别使用8,16,24,32,64位存储空间。它们可以存储的值的范围从-2的(N-1)次方到2的(N-1)次方-1之间。整数类型有可选的UNSIGNED属性,表示不允许负值,这大致可以使整数的上限提高一倍。例如TINYINT UNSIGNED可以的存储范围是0~255,而TINYINT的存储范围是 -128~127。有符号和无符号类型使用相同的存储空间,并具有相同的性能。MySQL可以为整数类型指定宽度,例如INT(11),对于存储和计算来说,INT(1)和INT(20)是相同的.

VARCHAR需要使用1或2个额外字节记录字符串的长度。CHAR适合存储很短的字符串,CHAR非常适合存储密码的MD5值,因为这是一个定长的值。

BOLB和TEXT都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。

DATETIME这个类型能保存大范围的值,从1001到9999年,精度为秒。TIMESTAMP只使用了4个字节的存储空间,因此它的范围比DATETIME小得多,只能表示从1970年到2038年。

应该用无符号整数存储IP地址,MySQL提供INET_ATON()和INET_NTOA()函数在这两种表示方法之间转换。

MySQL限制了每个关联操作最多只能有61张表。

MySQL的ALTER TABLE操作的性能对大表来说是个问题。MySQL执行大部分修改表结构操作的方法是用心的结构创建一个空表,从旧表中查出所有的数据插入新表,然后删除旧表。耗时久且可能造成内存不足,造成失败,建议可以先在一台空闲服务器上面操作,然后再切换。

为了高效的载入数据到MyISAM表中,有一个常用的技巧就是先禁用索引、载入数据,然后重新启用索引。不幸的是,这个办法对于唯一索引无效,因为DISABLE KEYS只对非唯一索引有效。

范式是好的,但是反范式(大多是情况下意味着重复数据)有时也是必须的,并且能够带来好处。

风吹向你我都妒忌,为何我都不能拥抱你,你在我的眼睛里!

高性能MySQL--MySQL架构与历史

高性能MySQL--MySQL基准测试

高性能MySQL--服务器性能剖析

高性能MySQL--Schema与数据类型优化

高性能MySQL--创建高性能的索引

高性能MySQL--查询性能优化

高性能MySQL--MySQL高级特性

高性能MySQL--优化服务器设置

高性能MySQL--操作系统和硬件优化

高性能MySQL--复制

高性能MySQL--可扩展的MySQL

高性能MySQL--高可用性

高性能MySQL--云端的MySQL

高性能MySQL--应用层优化

高性能MySQL--备份与恢复

高性能MySQL--MySQL用户工具