用于 EAV 结构存储的 PostgreSQL 与 MySQL

Ale*_*lex 6 postgresql mysql-5 performance database-design eav

使用 Postgres 9.x 与 MySQL 5.x 存储EAV(实体-属性-值)结构有什么实际区别,或者有什么优势,尤其是在读取性能方面?

Erw*_*ter 15

两者都擅长像这样的简单任务。如果您最终在搜索共享许多属性(“关系除法”)的实体时遇到大查询,我希望 PostgreSQL 因其卓越的索引处理而具有优势。

特别是,多个连接可以与位图索引扫描相结合——这是 MySQL 中不存在的特性。它有一个“index_merge”功能来替代它。

对于 PostgreSQL,您可能还对存储键/值对集的hstore扩展感兴趣。

  • +1 为 hstore。在列上使用索引时速度非常快。 (3认同)
  • 另外,我想补充一点,PostgreSQL 有一些非常有用的函数,可以让 EAV 以合理的方式工作(如 array_agg、unnest 等)。我们在 LedgerSMB 中使用 EAV 的各种区域(设置、系列中的下一个东西、菜单脚本参数等)都是数据实际上非常适合 EAV 的区域,这些功能在那里非常有用。在这些情况下,我希望将来更多地使用 hstore。 (3认同)
  • 您可以补充一点,MySQL 对查询中可以连接的表的数量有一个硬性限制 (61)。 (2认同)