为每个"列表"创建一个新表是加速数据库查询的最佳方式吗?



我的postgres数据库有一个listslist_items表。list_id列上有一个索引。为了列出列表中的所有项目,我一直在list_items中搜索list_id等于lists表中的id的地方。

lists:

<表类> id 标题 tbody> <<tr> 0 "foo" 1 "bar"

这样的决定总是取决于您认为您的最终查询可能会结束。最初的解决方案在大多数情况下都运行良好,前提是在查找列上添加索引。然后,您可以在运行搜索时使用id将这些表连接在一起。通过将列表项放入单个表中,您可以轻松地规范化数据,因此特定项只占用数据库中的一次空间。

有时您可能会对表进行分类,因此它可能会获得数据的子集。也许所有的项目都以字母开头,但你不会做这样的事情,直到表格达到一定的阈值。您的多个解决方案确实有效,但如果您想在单个查询中导出数据,则需要对许多表进行联合。

如果您从不需要查找项目是什么,只是想导出它们,您可以考虑jsonb,它允许您将json二进制对象直接放入列表详细信息旁边的行中。您可以查询json中的项目,但对于快速查找,它不如索引数据库列高效。使用您的示例,您将最终得到一个表。

<表类> id 标题 list_items tbody> <<tr> 0 "foo" ("你好"、"foobar") 1 "bar" ['世界']

最新更新