sql - 在 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 库来构建我的查询。
看看这些查询,您认为哪一个更有效,为什么?
解决方案
推荐阅读
- php - Symfony 4 - 内置网络服务器 - 忽略路由过程中的一些路径
- c# - C# Entity Framework 包括具有 include() 性能糟糕的邻居表
- java - Spring Boot 中的 Maven 依赖问题
- sql - 如何在 Oracle 选择语句中声明变量
- sql-server - 在另一个查询中使用来自一个查询的参数
- php - 为什么 HTML 电子邮件只是在 php 中显示代码
- ruby - 无法在 macOS Mojave 10.14.2 中使用 RVM 安装任何 ruby 版本
- .net - 面板中的控件被隐藏,直到我调整窗口大小
- inno-setup - 使用 Inno Setup 增加日期以实施试用期
- python - Python - 将文本文件解析为 json