我有一个大表(约200万行),每行代表一个图像。我想为每个图像存储JSON格式的EXIF元数据。这个JSON blob大约是每个图像6KB。
这个EXIF元数据不会经常被查询/使用,我想知道将它存储在一个包含两列(imageid,exifjson)的单独表中是否明显更高效,或者PostgreSQL是否会处理它这对于现有表格上的text
列很好。我不希望添加列来显着减慢表上的普通查询,或者数百万的6KB文本值使PostgreSQL陷入困境。
答案 0 :(得分:5)
我会将该列TOAST - 编辑。
ALTER TABLE ... ALTER <column> SET STORAGE <EXTERNAL|EXTENDED>;
-- EXTERNAL - out-of-line storage, not compression[1]
-- EXTENDED - both compression and out-of-line storage
PostgreSQL已经尝试将它用于大于~2kB的数据。
[1]“所使用的压缩技术是LZ系列压缩技术中相当简单且非常快速的成员。”
答案 1 :(得分:2)
最好使用单独的表,但您可以使用现有表。除非使用现有的“select * from”查询检索此字段,否则几乎不会产生影响。而且你永远不会用这些数据填充postgres,因为它有几乎无限的阈值:
http://www.postgresql.org/about/
关于选择其他列数据时的干扰:
非常长的值也存储在后台表中,这样它们就不会干扰对较短列值的快速访问。
http://www.postgresql.org/docs/current/static/datatype-character.html