这样的查询是否创建临时表?还是一次在查询中使用?
SELECT A
FROM
(
SELECT A, B FROM TableA
UNION
SELECT A, B FROM TableB
) AS tbl
WHERE B > 'some value'
我正在使用psql和雪花
答案 0 :(得分:1)
否,它不会创建临时表。
但是,它确实实现了行。我很确定它在所有数据库中都能做到。使用union
需要删除重复项。复制删除通常使用排序或哈希算法完成。
在这两种情况下,数据都将被写入中间存储。
但是,通常不会写入用于临时表的额外元数据。这只是“查询内”的临时空间。
答案 1 :(得分:0)
在Postgres中,不会创建临时表。 “临时表”是指磁盘上的一个文件,在Sub Insert_New_Col()
Dim R As Range, BeforeR As Long
'Find 'Totals' in row 5 of active sheet
Set R = Rows(3).Find(what:="Total for the Year", lookat:=xlWhole)
'identify the column to copy (last month)
BeforeR = R.Column - 1
If R Is Nothing Then
MsgBox ("The word 'Totals' was not found in Row 5 - macro terminated!")
Exit Sub
ElseIf Not R Is Nothing Then
'copy last month's column
Columns(BeforeR).Copy
'insert copied cells before the Totals column
Columns(R.Column).Insert Shift:=xlRight
Application.CutCopyMode = False
End If
End Sub
中有一个relfilenode
条目,该文件在pg_class
会话期间一直存在。为了执行查询,在内存中创建了一个“表”,但是从可以从中查询的意义上说,它不是“表”(更多是数据结构)。
您要问的基本上是Postgres如何处理子查询-评估并实现子查询,然后将其存储到内存/缓存中以备将来参考。如果您在重复查询2-3次时查看psql
,则会看到生成了一个子查询节点,随后对该查询的调用将导致EXPLAIN (ANALYZE, BUFFERS)
,表明先前的呼叫已被缓存,以便以后更快地访问。