在MySQL中,TEXT或BLOB的指定大小是否会影响性能或表大小?

时间:2013-07-23 20:41:39

标签: mysql database performance optimization database-design

我有一个数据表,它只包含foreign_key字段和BLOB列,因为其他表不需要定期检索大blob。

因此,对于data-blob而言,它的长度是多少?例如,如果我想存储缓存的网页......对于大多数页面,BLOB的65KB的限制将做到这一点......但不可避免地,会有数据的100KB,但斑点的大小旁边,MEDIUMBLOB页,是16MB:

http://dev.mysql.com/doc/refman/5.0/en/blob.html

如何将我的datablob字段从BLOB更改为MEDIUMBLOB会影响任何类型的检索操作,无论是连续几个记录还是大批量操作?我不是说,“如何检索16MB大小的记录与64KB的记录不同?”......我的意思是,如果该blob人口稀少,是否存在差异?也就是说,这些字段中有90%只有60K的数据,其余的可能超过了65K的限制。

另一种提问方式:如果我正在使用的数据可能包含50%BLOB大小的blob,以及50%的MEDIUMBLOB ...我应该创建两个表并将数据分开吗?或者它只是制作一个MEDIUMBLOB表并将所有小blob存储在那里? (这将简化数据库访问代码)

1 个答案:

答案 0 :(得分:2)

BLOB和MEDIUMBLOB之间的区别基本上是它以2个字节或3个字节编码长度。否则,它仅存储您在给定行上存储的内容的长度。

所以你应该将列声明为MEDIUMBLOB。

某些客户端数据库访问库(例如PHP)将预分配缓冲区以保持列可能返回的最大长度,因为它们在获取之前无法判断它是否只有65K或100K或16MB。我发现,如果你尝试获取LONGBLOB,PHP会爆炸,因为它会预先分配一个4GB的缓冲区,大于PHP的最大内存限制。