优化数据库中的 MySQL 文件 (blob)

Posted

技术标签:

【中文标题】优化数据库中的 MySQL 文件 (blob)【英文标题】:Optimizing MySQL files in database (blob) 【发布时间】:2011-07-16 04:38:29 【问题描述】:

由于内部原因(框架结构),我将许多图像保存在一个带有 mediumBLOB 的表中。

考虑到检索这些图像的查询是以相当低的速率发送的,有没有办法告诉 mysql 将该表从内存中排除?我不想让一张 2GB 内存的表偶尔使用一次。

有什么办法可以优化吗?

(注意:如果这有帮助,我可以将此表移动到仅包含此表的新数据库中)

谢谢

【问题讨论】:

【参考方案1】:

MySQL 不会为 BLOB 类型生成内存表,因为存储引擎不支持它。

http://dev.mysql.com/doc/refman/5.0/en/internal-temporary-tables.html

“某些情况会阻止使用内存中的临时表,在这种情况下,服务器会使用磁盘表来代替:

表中存在 BLOB 或 TEXT 列"

这意味着您应该将 BLOB 放入不同的表中,并将其他有用的数据保留在 BLOBless 表中,以便优化该表。

【讨论】:

什么? O_O 我的主表有一个 TEXT 列(用于文章)你是说我的主表需要磁盘访问才能被解析? O_O @yes123:没错。克服这个问题的另一种方法是拥有一个大 RAM 磁盘,然后 MySQL “欺骗”使用它。 无论你的RAM是否很大,问题是无法估计内存消耗。一种解决方案是使用内存直到 XX GB,然后放弃内存解决方案并转向磁盘。你能想象不可预知和可怕的用户体验,当 TABLE 变得太大时,数据库引擎做出反应,将数据处理推回慢 100 倍的介质? (^_^) 那么我想知道为什么我的mysql进程那么大..我所有最大的表都应该只在磁盘上,因为TEXT-BLOB =/也许mysql将主索引保存在表中? MySQL 将所有索引推送到内存中,如果它适合允许的内存(配置文件:key_buffer_size=XXXM,其中 XXX 是以兆字节为单位的数量)【参考方案2】:

对我来说,将这种表移到单独的数据库中听起来是一种非常有效的方法。在工作中,我们有一台用于操作内容(订单、目录等)的数据库服务器和一台用于日志(网络日志和电子邮件副本)和媒体(图像、视频和其他二进制文件)的数据库服务器。即使在同一台机器上运行单独的实例也是值得的,因为正如您所提到的,它会划分缓冲区缓存(或任何您的存储引擎的等价物)。

【讨论】:

以上是关于优化数据库中的 MySQL 文件 (blob)的主要内容,如果未能解决你的问题,请参考以下文章

java 以二进制流的方式读取mysql 中的blob文件,并写入本地文件夹下

如何将从blob url获取的音频数据保存到mysql db中的文件系统和路径中

MySQL PHP没有将完整文件存储到BLOB

MySQL 中的 BLOB 和 TEXT 数据类型有啥区别?

new blob 参数

MySQL,longtext、text 还是 blob 哪个更高效?提高插入效率