为什么或如何解决 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 拆分到一个单独的表中。
例如,您可以有一个包含列 id
和 name
的表 xxx
,以及另一个表 xxx_data
包含列 id
和 data
。如果只想要名字,根本不需要查询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/