在Postgres中,使用数组存储值与创建另一个具有“一对多”关系的表来存储值相比,会产生什么性能影响?
我有一个表需要能够在数组列或单独的表中存储1-100个不同的字符串值。这些值需要经常被搜索以进行精确匹配,因此查询性能至关重要。是使用数组解决方案更快,还是使用连接在单独的表中查找值更快?
在Postgres中,使用数组存储值与创建另一个具有“一对多”关系的表来存储值相比,会产生什么性能影响?
我有一个表需要能够在数组列或单独的表中存储1-100个不同的字符串值。这些值需要经常被搜索以进行精确匹配,因此查询性能至关重要。是使用数组解决方案更快,还是使用连接在单独的表中查找值更快?
数组元素的搜索性能较差的原因可能是数组在内部存储为字符串,如https://www.postgresql.org/message-id/op.swbsduk5v14azh%40oren-mazors-computer.local所述。数组不是集合;搜索特定数组元素可能是数据库设计错误的标志。考虑使用单独的表格,每个项目都是一个数组元素的行。这将更容易搜索,并且对于大量元素来说,很可能会扩展得更好。
实际上,Postgres将数组存储为字符串。一个带有许多括号的字符串。
虽然我无法通过任何官方的PostgreSQL文档来证实这个说法。我也没有任何证据表明处理结构良好的字符串一定比处理表格性能差。