提到多对多关系,第一个反应是 3 张表 —— 即,两张数据表、一张关系表,例如:
t_product
| id (integer) | name (character verying) |
t_tag
| id (integer) | name (character verying) |
r_product_tag
| product_id (integer) | tag_id (integer) |
tag
查询 product
时(/product?tags=苹果,橘子
),只用数据库该怎样实现?JOIN
在一起?感觉查询效率会很低。t_product
新增一冗余列 tags (character verying)
,并在该列上建立 PostgreSQL
的 GIN
索引。这种方式顺便还可以通过分词将单个标签的字符串拆分成多个关键字,更容易搜索。t_product
| id (integer) | name (character verying) | tags (character verying) |
id
查询(/product?tag_ids=22,12,45
),表 t_product
新增一冗余列 tag_ids (integer[])
,这种情况该在此列上建立 B+树索引
还是 倒排索引
? t_product
| id (integer) | name (character verying) | tag_ids (integer[]) |
不知道 PostgreSQL 对 integer[]
类型字段的索引机制是怎样的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.