Postgresql 是 1 个查询还是多个?

Posted

技术标签:

【中文标题】Postgresql 是 1 个查询还是多个?【英文标题】:Postgresql is this 1 query or multiple? 【发布时间】:2014-07-18 07:11:51 【问题描述】:

我是 postgresql(和一般的 SQL)的新手,我现在最关心的是优化。下面我有一个简单的查询。但是我相信这只是一个查询。但是,也可能只有 3 个查询(那些存在新的联合全部的查询)。或者实际上可能是 6 个查询,因为实际上有 6 个 select 语句。

with foo as (
    select * from tableA
), bar as (
    select * from tableB
), zeta as (
    select * from tableC
)
select * from foo
union all
select * from bar
union all
select * from zeta

上面的查询有多少个查询?


还有……

这个问题很重要的原因是,我不知道我是应该像上面那样写我的查询还是简单地将所有查询分开。

select * from tableA; --query 1
select * from tableB; --query 2
select * from tableC; --query 3

【问题讨论】:

这可能会有所帮助:***.com/questions/1067016/… 在 psql 中,"explain " 将向您显示有多少序列扫描、索引扫描等。针对您的复合查询和三个单独的查询尝试它,并比较它们。跨度> 【参考方案1】:

形式上它是一个复杂查询(作为“复杂句子”),其中包含六个“简单”查询。不过,您不需要这些with statements,因为实际上它们什么都不做。您的第一个查询应如下所示:

select * from tableA
union all
select * from tableB
union all
select * from tableC;

在这种情况下,您将获得一组行作为结果。如果你执行

select * from tableA;
select * from tableB;
select * from tableC;

您将拥有三组独立的行。

【讨论】:

以上是关于Postgresql 是 1 个查询还是多个?的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql 和 Oracle:从公共子查询更新多个表

单个查询中的 Postgresql 多个连接,其中连接的外键不存在于所有表中

PostgreSQL 查询耗时过长

postgresql9.6安装

在 PostgreSQL 中按多个内连接的条件计数

从 PostgreSQL 序列中选择多个 id