sql - 如何高效查询带有标签的项目

标签 sql postgresql postgresql-10

我的架构看起来像这样:

items ( id, title)
tags (id, name )
items_tags ( item_id, tag_id )

我想高效获取项目列表,每个项目都有自己的一组标签。大概是对数据库一个查询高效 我的意思是查询应该在尽可能快的时间内返回结果,使用最少的服务器和数据库资源,如 CPU 和 RAM。据推测,项目和标签的数量超过数百万并且并行查询的数量很高。高负载和所有的东西。所以像这样:

// Get all items with tags
'Item-1' has 'Tag-1', 'Tag-2'
'Item-2' has 'Tag-3', 'Tag-5'
...

我正在使用 PostgreSQL 10。所以实际上有两个问题:

  1. 从此类模式中检索此类数据的高效 SQL 查询会是什么样子?
  2. 也许可以重新设计数据架构,以便在这种情况下更加高效?也许我应该使用 Arrays、HStore、JSONB?

最佳答案

您的架构适用于多对多关系。

您需要添加的只是主键和外键约束。

要查询您需要的数据,只需按照它们的自然连接条件连接三个表即可。

要获得聚合列表,请使用聚合函数,如 string_agg 并按 items.title 分组。

关于sql - 如何高效查询带有标签的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48727155/

相关文章:

mysql - 带有计算的sql select语句

mysql - 需要高级 SQL 帮助

macos - 在 OSX 中有没有比 Navicat 更好的东西?

sql - 如何找到postgres中的第一个空值?

postgresql - 在 Postgresql 中向用户授予权限从不授予权限

sql - 如何在单个查询中使用 count ,'like' 和 group by?

sql - 如何在 sql server 中聚合 "continuous"记录?

Django 1.8 迁移 - 关系 "django_content_type"已经存在

postgresql - 将 SQLDA 从 DB2 转换为 PostgreSQL

postgresql - 获取分区表的表大小(Postgres 10+)