选择合适的数据类型

1、char与varchar

char固定长度的字符类型,处理速度比varchar快得多,但浪费存储空间,适合:长度变化不大并且对查询速度有较高要求的数据。

varchar可变长度的字符类型。

MyISAM:char

MEMORY:均作为char类型处理

InnoDB:varchar最小化需要处理的数据行的存储总量和磁盘I/O。InnoDB内部的行存储格式没有区分固定长度和可变长度列(所有数据行都指向数据列值的头指针),主要性能因素是数据行使用的存储总量。

2、text和blob

blob能用来保存2进制数据

text只能保存字符数据

(1)blob和text值,删除操作会在数据表中留下很大的“空洞”,以后填入这些“空洞”的记录在插入的性能上会有影响。所以建议使用OPTIMIZE TABLE 功能对表进行碎片整理,避免因为“空洞”导致性能问题。

(2)可以使用合成的(Synthetic)索引来提高文本字段(text、blob)的查询性能。

合成索引:根据大文本字段的内容简历一个散列值,并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了。


只能用于精确匹配的查询。可以用MD5()、SHA1()、CRC32()或自己的应用逻辑来计算散列值。数值型散列值可以很高效的存储。


(3)前缀索引:对blob或者clob字段进行模糊查询,只为字段的前n列创建索引。

(4)在不必要的时候避免检索大型的blob或者text值。

(5)把blob或者text列分离到单独的表中。

3、浮点数与定点数

浮点数:float、double,插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定影的精度值。

定点数:decimal、numberuc。以字符串形式存放,插入数据的精度超过该列定义的实际精度,则默认SQLMode模式下会进行警告;TRADITIONAL传统模式下的SQLMode则系统直接报错,导致数据无法插入。

在精度要求比较高的应用中(比如货币)要使用定点数而不是浮点数来保存数据。

尽量避免浮点数的比较,非要用可以使用==比较。

浮点数存在误差。

注意浮点数中一些特殊值的处理

4、日期类型选择

(1)如果要记录年月日时分秒,并且记录的年份比较久远。最好用DATETIME,而不用TIMESTAMP。因为TIMESTAMP表示的日期范围要比DATETIME要短的多。

(2)如果记录的日期需要让不同时区的用户使用,那么最好使用TIMESTAMP。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值