为什么或如何解决mysql上的问题.
table xxx
-> id primary key
-> name varchar 255
-> data longblob
Run Code Online (Sandbox Code Playgroud)
当我存储到这个表100个文件时,每个100MB,该表将有10GB
然后尝试选择任何行...它需要很长时间
SELECT name FROM xxx WHERE id = 50 LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
大约需要8秒钟
我的问题可能在于,mysql在返回之前读取整行name,只有255个字符...所以当我想列出100个文件的名称时,mysql读取10 GB并返回大约2 KB的结果.
尝试将blob拆分为单独的表.
例如,你可以有一个表xxx包含列id和name,另一个表xxx_data包含列id和data.如果您只想要名称,则根本不需要查询xxx_data表格; 如果您同时需要名称和数据,则可以使用共享主键将表连接在一起id:
SELECT id, name, data
FROM xxx JOIN xxx_data USING (id)
WHERE id = ...
Run Code Online (Sandbox Code Playgroud)
有关更多信息和优化想法,请参阅例如优化MySQL查询的10个技巧.
| 归档时间: |
|
| 查看次数: |
3061 次 |
| 最近记录: |