如何解决postgres - 如何有效地查找给定表是否存在匹配对
items
id | name | group
-----------------------------------------------------------
1 | /foo/ | app1
2 | /foo/1 | app1
3 | /bar/2 | app1
4 | /foo/abc/def | app1
5 | /foo3/ | app2
6 | /bar3/ | app2
mapping
id_a | id_b
--------------
1 | 2
3 | 4
mapping.id_a and mapping.id_b have foreign key references to item.id
我需要使用 gino sqlalchemy 查找给定输入“名称”和“组”的映射表中的 id_a 和 id_b 之间是否存在关联。
示例:
- 对于输入'/foo/'、'/foo/1'、'app1' --> 匹配成功。
- 对于输入'/bar/2'、'/foo/abc/def'、'app1' --> 匹配成功。
- 对于输入 '/foo3/','/bar3/','app2' --> 匹配失败。
解决方法
这对于连接来说是微不足道的:
SELECT TRUE
FROM items AS i1
JOIN mapping AS m ON i1.id = m.id_a
JOIN items AS i2 ON m.id_b = i2.id
WHERE i1.name = '/foo/'
AND i2.name = '/foo/1' AND i2.group = 'app1';
如果返回一行,则表示匹配。
为了获得良好的性能,请创建以下两个索引(如果它们尚不存在):
CREATE INDEX ON item (name,group);
CREATE INDEX ON mapping (id_b);
那么你应该得到一个高效的嵌套循环连接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。