高性能MySQL–Schema与数据类型优化
- 3768
- MySQL
- 34
- super_dodo
- 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只对非唯一索引有效。
范式是好的,但是反范式(大多是情况下意味着重复数据)有时也是必须的,并且能够带来好处。
风吹向你我都妒忌,为何我都不能拥抱你,你在我的眼睛里!
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例