首页 > 解决方案 > 在 SQL 中使用单个联接与使用多个联接获得相同结果的性能影响

问题描述

我有两个 SQL 查询(使用 Postgresql 作为后端),它们基本上检索相同的结果。

两个表结构:

值[id(int),attr(int),值(jsonb)]

doc_id[id(int), uuid(text)]

它们如下: -

select values.value, doc_id.uuid from values join ((select id from values where attr = 1 and value ->> 'v' LIKE '%a%') intersect (select id from values where attr = 1 and value ->> 'v' LIKE '%a%' intersect(select id from values where attr = 3 and value ->> 'v' LIKE '%b%'))) as x on values.id = x.id join doc_id on values.id = doc_id.id order by values.id, scim_user_attribute_values.attribute;
SELECT alias_value, doc_id.uuid 
FROM (SELECT values_alias.value, doc_id.uuid
FROM values JOIN values AS values_alias ON values.id = values_alias.id JOIN doc_id ON values.id = doc_id.id
WHERE values.attr = 1 AND values.value ->> 'v' LIKE '%a%' INTERSECT SELECT values_alias.value ,doc_id.uuid
FROM (SELECT  values_alias.value, doc_id.uuid
FROM values JOIN values AS values_alias ON values.id = values_alias.id JOIN doc_id ON values.id = doc_id.id
WHERE values.attr = 1 AND values.value ->> 'v' LIKE '%a%' INTERSECT SELECT values_alias.value, doc_id.uuid
FROM values JOIN values AS values_alias ON values.id = values_alias.id JOIN doc_id ON values.id = doc_id.id
WHERE values.attr = 3 AND values.value ->> 'v' LIKE "%b%" AS anon_2) AS anon_1

我不确定第二个查询对您是否有意义,但它实际上是来自 sqlalchemy python 库的翻译查询(为了便于阅读,我已经对其进行了修剪)。

这两个查询在语法上可能不正确,它们只是为了说明我的意思。请不要担心每个查询的正确性。所以我使用 sqlalchemy ORM 库来构建我的查询。

看看这些查询,您认为哪一个更有效,为什么?

标签: sqlpostgresqljoin

解决方案


推荐阅读