MySQL SELECT 非常慢,因为 LONGBLOB

标签 mysql performance

为什么或如何解决 mysql 上的问题。

table xxx
-> id primary key
-> name varchar 255
-> data longblob

当我在这个表中存储 100 个文件,每个 100MB,该表将有 10GB

然后尝试选择任何行...需要很长时间

SELECT name FROM xxx WHERE id = 50 LIMIT 1;

大约需要 8 秒

我的问题可能在于,mysql 在返回 name 之前读取整行,它只有 255 个字符...所以当我想列出 100 个文件的名称时,mysql 读取 10 GB 并且返回大约 2 KB 的结果。

最佳答案

尝试将 blob 拆分到一个单独的表中。

例如,您可以有一个包含列 idname 的表 xxx,以及另一个表 xxx_data 包含列 iddata。如果只想要名字,根本不需要查询xxx_data表;如果您同时需要名称和数据,则可以使用共享主键 id 将表连接在一起:

SELECT id, name, data
FROM xxx JOIN xxx_data USING (id)
WHERE id = ...

有关更多信息和优化想法,请参见例如10 tips for optimizing MySQL queries .

关于MySQL SELECT 非常慢,因为 LONGBLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883705/

相关文章:

php - Laravel 查询生成器,基于条件的位置?

api - 如何在REST API中限制客户端

.net - 为什么复制对字符串的引用比复制整数慢得多(对于 Array.Copy(),反之亦然)?

html - 在 ASP.net 中动态生成 HTML 表格会导致严重的性能问题吗?

java - android studio 中未检测到我的设备(驱动程序问题)

java - 等待 Swing 完成更新 JProgressBar,然后再继续

mysql - 左连接表不重复

mysql - sql:选择每个用户投票最多的项目

mysql - 我的解释语句中的派生表是什么

mysql - 使用 JSON_EXTRACT 将查询从 MySQL 转换为 BigQuery