只是想知道,在 pgsql cte 中是否会创建临时表,并且每次加入查询时都不会重新执行 cte?下面是同一查询的 pgsql 和 sql server 版本,sql server 需要 6 秒,pgsql 只需要 3 秒。这是侥幸还是永远都是这样?
pgsql:
with a as(select pg_sleep(3), 1 b)
select 1
from a t1
join a t2 on t1.b=t2.b
SQL服务器:
with a as(SELECT b FROM
OPENQUERY([anylinkedserver],'WAITFOR DELAY ''00:00:03'';select 1 b;'))
select 1
from a t1
join a t2 on t1.b=t2.b
WITH 查询的一个有用属性是它们仅被评估一次
每次执行父查询时,即使它们被引用更多
比父查询或兄弟WITH查询一次。因此,昂贵的
多个地方需要的计算可以放在一个
使用WITH查询来避免多余的工作。另一种可能的应用是
防止对具有副作用的函数进行不必要的多次评估。
Source: 精美手册 http://www.postgresql.org/docs/9.4/static/queries-with.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)