存储包含文本数据的大型 blob 时,请考虑先对其进行压缩。
InnoDB
当整个表被or压缩时,不要使用这种技术MyISAM
。对于具有多个列的表,为了减少不使用 BLOB 列的查询的内存需求,可以考虑将 BLOB 列拆分为一个单独的表,并在需要时使用连接查询来引用它。
由于检索和显示 BLOB 值的性能要求可能与其他数据类型有很大不同,因此您可以将特定于 BLOB 的表放在不同的存储设备上,甚至放在单独的数据库实例上。例如,要检索 BLOB 可能需要大量顺序磁盘读取,这更适合传统硬盘驱动器而不是 SSD 设备。
有关二进制列有时优于等效 BLOB 列 的原因, 请参阅第 8.4.2.2 节,“针对字符和字符串类型进行优化” 。
VARCHAR
您可以将列值的散列存储在单独的列中,索引该列,然后在查询中测试散列值,而不是针对非常长的文本字符串测试相等性。(使用
MD5()
orCRC32()
函数生成散列值。)由于散列函数可以为不同的输入生成重复的结果,因此您仍然 在查询中包含一个子句以防止错误匹配;性能优势来自散列值的更小、更容易扫描的索引。AND
blob_column
=long_string_value