数据库优化(三) ---- 数据类型的选择

为表中的字段选择合适的数据类型
当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或者二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。

整数类型:
tinying、smalint、mediumint、int、bigint


实数类型:
float、double、decimal(精确)

M:数值的总位数。 通俗点讲,就是看有多少个数字,比如,5.6789,M就是5
D:小数点后面能保留几位。 比如上面的5.6789 ,D就是4。 这只是举一个例子,来说明M,D是什么,实际是先有M,D的,然后在来控制数值,而不是更具数值来确定M,D。不单单就MECIMAL有M,D这两个参数,FLOAT 和 DOUBLE 度有。

都是用来表示我们所说的小数的也就是浮点数,但是三种的精度不一样,也就是后面显示的位数不一样,

区别
区别一:
FLOAT显示后面的小数点位大概在40多位,
DOUBLE能显示的就是300多位了,不是一个层次上的,
DECIMAL这个小数点后面能显示的位数跟DOUBLE差不多,
区别二:
FLOAT和DOUBLE在不指定精度时,也就是不用(M,D),默认会按照实际的精度,也就是你写多少就是多少,而DECIMAL如不指定精度默认为(10,0),也就是如果不指定精度,插入数值56.89,在数据库中存储的就是57。所以一般使用DECIMAL时就会指定精度,而使用FLOAT和DOUBLE就不用。
区别三:
浮点数相对与定点数(DECIMAL)的优点就是在长度一定的情况下,浮点数能够表示更大的数据范围,但是缺点是会引起精度问题

对精度要求比较高的时候,比如货币、科学数据等,使用DECIMAL的类型比较好。其他的时候,看你要存放的数据的大小而定了,一般使用DOUBLE。并且在使用浮点数时需要注意,尽量避免做浮点数的比较,比如加、减,谁大谁小,这样的操作,会引起精度缺失。相信在一些程序语言中,遇到过float精度丢失的问题。

字符串类型:


VARCHAR类型的存储特点
varchar用于存储变长字符串,只占用必要的存储空间
列的最长度小于255则只占用一个额外自家用于记录字符串长度
列的最大长度大于255则要占用两个额外字节用于记录字符串长度
问题:
使用最小的符合需求的长度
varchar(5)和varchar(200)存储'mysql'字符串性能不同--消耗更多内存,内存是一样的
varcher适用场景
字符串的最大长度比平均长度大很多
字符串列很少被更新
使用了多字节字符存储字符串

char存储特点:
char类型是定长的
字符串存储在char类型的列中会删除末尾的空格
char类型的最大宽度是255

适用场景
char类型适合存储所长度近似的值
char类型适合存储短字符串
char类型适合存储经常更新的字符串列

如何储存日期数据
    DATATIME类型 定义宽度设置微妙 与时区无关占8个存储空间
    以YYYY-MM-DD HH:MM:SS[.fraction]
    范围:1000-01-01 00:00:00 到9999-12-31 23:59:59

    TIMESTAMP类型
    存储了格林尼治实践1970年1月1日到当前时间的秒事
    以YYYY-MM-DD HH:MM:SS格式显示,占用4个字节
    1970-01-01到2038-01-19
    依赖显示与所制定的时区
    在行的数据修改时可以自动修改timestamp列的值

    date类型和time类型
    只需要保存日期类型
    data类型有点
    1占用字节数比使用字符串、datatime、int要少,只需要3个字节
    2.可以使用日期函数进行计算
    1000-01-01到9999-12-31

    time是HH:MM:SS 长度改变微妙

    注意事项:
    不要使用字符串来存储日期时间数据
    占用空间少
    日期时间类型在进行查找过滤时可以利用日期来进行对比    
    日期时间类型还有丰富的处理函数,可以方便的对时期来处理数据
    使用int存储日期时间不如使用Timestatamp类型

    innodb:为表中每个列选择合适的类型
    主键应该可能的小
    主键应该是顺序增长的,增加数据的插入效率
    Innodb的主键和业务主键可以不同 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值