0

我有一个仅由 foreign_key 字段和 BLOB 列组成的数据表,因为其他表不需要定期检索大 blob。

因此,对于单独的数据块,它的长度是否重要?例如,如果我想存储缓存的网页...对于大多数页面来说,BLOB 的 65KB 限制可以做到...但不可避免地会有 100KB 数据的页面,但是下一个大小的 blob,MEDIUMBLOB,是16MB:

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

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

另一种问这个问题的方法:如果我正在使用的数据可能包含 50% 的 BLOB 大小和 50% 的 MEDIUMBLOB ......我应该创建两个表并以这种方式分隔数据吗?还是仅仅制作一张 MEDIUMBLOB 表并在其中存储所有小 blob 有什么区别?(这将简化数据库访问代码)

4

1 回答 1

2

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

因此,您应该将该列声明为 MEDIUMBLOB。

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

于 2013-07-23T20:55:45.270 回答