mysql数据库字段类型的选择原则
2016-06-08 21:14
429 查看
数据库类型的选择对数据库的性能影响很大
1 . 数据类型会影响存储空间的开销
2 . 数据类型会影响数据查询性能
所以当一个数据类型可以有多种选择多种类型的时候,应该优先考虑数字类型,其次是日期或二进制类型,最后应该是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。
原理:在对数据进行比较(查询条件,JOIN条件及排序)操作时:同样的数据,字符处理往往比数字处理慢,而且在数据库中,数据的处理是以页为单位,列的长度越小,数据类型占用的空间越小,利于性能的提升。
下面是字段类型所占的字节大小
2.从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。适合使用smallint
3.从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。适合使用int
4.从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。适合使用bigint
2.如果列中最大数据的长度小于50Byte,则一般也考虑使用char(当然,如果这个列很少用,则基于节省空加你和减少I/O的考虑,还是可以使用varchar)
3.一般不宜定义大雨50Byte的char类型列。
注意:utf8每一个字符时3Byte
2.由于float的存储空间的开销一般比decimal小(精确到7为小数只需要4个字节,而精确到15位小数只需要8个字节)故非精确数据类型建议使用float
优点:字段的长度比datetime小
缺点:使用不方便,需要函数进行转换
限制:只能存储到2038-1-19 11:14:07 即2^32为2147483648
2,需要考虑需要存储时间的粒度
年 月 日 小时 分钟 秒 周
1 . 数据类型会影响存储空间的开销
2 . 数据类型会影响数据查询性能
所以当一个数据类型可以有多种选择多种类型的时候,应该优先考虑数字类型,其次是日期或二进制类型,最后应该是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。
原理:在对数据进行比较(查询条件,JOIN条件及排序)操作时:同样的数据,字符处理往往比数字处理慢,而且在数据库中,数据的处理是以页为单位,列的长度越小,数据类型占用的空间越小,利于性能的提升。
下面是字段类型所占的字节大小
Tinyint,SmallInt,Mediumint,Int,Bingint该如何选择
1 .从 0 到 255 的整型数据。存储大小为 1 字节。适合使用Tinyint2.从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。适合使用smallint
3.从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。适合使用int
4.从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。适合使用bigint
char与varchar如何选择
1.如果列中要存储的数据的长度差不多是一致的,则应该考虑char,否则应该考虑用varchar.2.如果列中最大数据的长度小于50Byte,则一般也考虑使用char(当然,如果这个列很少用,则基于节省空加你和减少I/O的考虑,还是可以使用varchar)
3.一般不宜定义大雨50Byte的char类型列。
注意:utf8每一个字符时3Byte
decimal和float如何选择
1.decimal用于存储精确数据,而float只能用于存储非精确数据,故精确数据最好使用decimal类型2.由于float的存储空间的开销一般比decimal小(精确到7为小数只需要4个字节,而精确到15位小数只需要8个字节)故非精确数据类型建议使用float
时间类型如何存储
1.使用int来存储时间字段的优缺点优点:字段的长度比datetime小
缺点:使用不方便,需要函数进行转换
限制:只能存储到2038-1-19 11:14:07 即2^32为2147483648
2,需要考虑需要存储时间的粒度
年 月 日 小时 分钟 秒 周
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- Android之获取手机上的图片和视频缩略图thumbnails
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- 数据库链接字符串查询网站
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法