แแแแ แ, แแแแช แฃแแแ แแงแแแแแก
... แแแแแแแ แจแแแฃแจแแแแแฃแ แจแแแแแฎแแแจแ แแแแขแแฅแกแขแฃแ แ แแแแแจแแแแแแแ แจแแกแแแแแแกแ แแแแแแก แแแแแซแแแแกแแแแก:
แแแกแ แแแแ แ แแแฌแแแแก แแ แฉแแแแฌแแ แจแ
แแแ แแแแ แแแฌแแแแก แขแ แแแกแแ แแแขแ, แ แแแแแแช แแซแฆแแแแแ แจแแแแแฎแแแก แจแแกแ แฃแแแแแก แขแแแฃแ แแ แแแแแแแแก แแ แแแ แแแแแฌแงแแแขแแแแแแแก, แจแแแแซแแแแ แแฎแแแแ แกแขแแขแแแจแ
"แ แแชแแแขแแแ แแแแแแแแแฃแแ SQL แแแแฎแแแแแแแกแแแแก" .
แฏแแ แแแคแแ แแแ แแแแแฌแงแแ - แแ แแแแแแก แแฆแแ แแแแแคแแ แแแแแ, แฃแแแ แแแแแคแแ แแแแ, แฃแแแ แแแแฅแแก แแแแแแ แแ แแแกแแแแแ, แแแแ แแ แแฎแแแแ.
แฉแแแ แแแแฉแแแแแแแแ, แ แแ แแกแแแ แแ แแคแแ แแแขแแ แแแฃแแ โแคแฃแ แชแแแโ แแฃแ แแแแแแแ แแแแฆแแแฃแแ แแแแฎแแแแ แซแแแแแ แแแฎแแแฏแ แแ, แจแแกแแแแแแกแแ, แแแฃแฎแแ แฎแแแแแ แฉแแแก.
แแแแกแแแฃแแ แแแแ แแแจแแ, แ แแแแกแแช แแแแแแแแแ แแแ โแฌแแแแแแโ แแแแฎแแแแแก แแแฌแแแก แแแแจแ (แแก, แ แ แแฅแแ แฃแแแ, แแแขแแแแขแแ แแแ, แแแแ แแ แแก แฎแแแแ) แแ แ แฎแแแแ. แกแแจแแแแแแแแ!
แแก แ แแแแ แแ แฃแคแ แ แแแแแแแ แแแแฎแแขแแ.
แแ แแฃ แฉแแแ แจแแแแแซแแแ แแก แแแแแแแ แแแแฎแแขแแ, แแแฃ แแแแจแแแแ แแ แแแแแแ แฃแแแ แแแแฎแแแแแก แกแฎแแฃแแ, แแแจแแ แจแแแแแซแแแ แแ แแแแฎแแแแแก แแแแแแฃแ แแแแแฅแขแก โแแแแฃแแแแ แแโ แแแแแจแแแแ - แ แ แแแฎแแ แแแแแแก แจแแกแแแแแแก แฌแแ แขแแแจแ.
แจแแแแแฎแแแก แกแแแขแแฅแกแแก แฎแ
แแแแกแแแแแก แฏแแ แแแแฎแแแแ แฃแแแ แแแแแแแแแแแก.
แ แแแแแ แแแแฅแแก
แฉแแแ แแแแแแแแ แแแแฎแแแแแก แกแฎแแฃแแก, แ แแแแ แช แจแแงแแแแแก แฉแแแแก แคแฃแแฅแชแแแจแ - แแแแแกแแแแแแ แแแฆแแแ แแแแแแแแแแแฃแ แกแแแขแแฅแกแฃแ แฎแแก JSON แแแแแฅแขแแก แกแแฎแแ.
แแฎแแ แฉแแแ แจแแแแแซแแแ แแแแฃแจแแแ แแ แฎแแก แกแแแแ แแกแแแ แ แแแแแ แแฃแแแแแ แแ แจแแแแ แแแแ แแแแฎแแแแ แฉแแแแแแแก แกแแกแฃแ แแแแ แฉแแฆแ แแแแแแแ, แจแแฆแแแแแ แแ แคแแ แแแขแแ แแแแ. แแ แ, แแก แแ แแ แแก แแแแคแแแฃแ แแ แแแแแ, แแแแ แแ แแแแฉแแแแแแแแ, แ แแ แแก แแแกแแฎแแ แฎแแแแแ แแฅแแแแแแ.
แจแแแแแฎแแแกแ แแ แแแแแแก แแแแแซแแแแก แ แฃแแแแแก แจแแแแแแ
แแฎแแ แแแแฎแแ, แ แแแแ แจแแแแแซแแแ แแแแแแ แแแแแแ แแแแแ, แ แแแแแแช แแแแแแแแแแแแ แแแ แแแ แแขแแแแ แแ แจแแแแแฎแแ, แ แแแแแแช แแแแแแแแแแแแ แแแแ แแจแ.
แแแแฆแแ แแแ แขแแแ แแแแแแแแ - แฉแแแ แแแแฅแแก แจแแแแแฎแแ, แ แแแแแแช แฅแแแแก CTE-แก แแ แแแกแแแ แแ แฏแแ แแแแฎแฃแแแแก. แแก แแงแแแแแแแก แแกแแ แแแแแแก.
CTE
แแฃ แงแฃแ แแแฆแแแแ แแแแแแแ แแแแแ, แแ-12 แแแ แกแแแแแ (แแ แแแกแแแ แแแฌแงแแแฃแแ แกแแแแแแซแ แกแแขแงแแแ MATERIALIZED
) แคแแ แแแ แแแ
แแก แแแจแแแแก, แ แแ แแฃ แฉแแแ แแฎแแแแแ CTE แแแแแแก แกแแแแ แแแแฎแแแแแจแ แแ แแแแแซแก แกแแแแ แแแแแแจแ CTE
, แแแจแแ แแก แแแแแซแแแ แแฃแชแแแแแแแ โแแแ แซแแแแโ แแ แแแแแแแก, แจแแแแแซแแแ แแแฃแงแแแแแแแแ แแแแแแ แแแแแแ แแกแแแ.
แแแ แกแแแแแแแก แแ แแแแแแ: CTE-แแแ แจแแแซแแแแ แแงแแก แฌแงแแแแแ.
แแ แแก แซแแแแแ แชแฃแแแ แแแแฃแแฃแแ แแ แแฃแแแแช แแ แแ แแ แแแแแ แกแแฎแแแ. แแแแแแแแแ, แจแแแแซแแแแ แจแแแแแ CTE A
แแแแแแแแ CTE X
, แแ แแแแแ แแแแแแ แจแแแแแ CTE B
แแแแแแแ แแกแแ CTE X
:
WITH A AS (
WITH X AS (...)
SELECT ...
)
, B AS (
WITH X AS (...)
SELECT ...
)
...
แจแแแแ แแแแกแแก แแก แฃแแแ แแแกแแแแแ. แแแแก โแแแแแแแแโ แแแแแแ - แแแแแแก แแแแแฎแแแช แแ, แแแแฎแแแแแก แกแฎแแฃแแแก แแแแแฎแแแช แแ - แซแแแแแ แ แแฃแแแ. แแฃ แแฅแแแแ CTE แแแแแ แ แแฃแแแ, แฌแงแแแแแ แแ แแแแฎแแแแแแ แแแแแ, แแแจแแ แแก แกแ แฃแแแแ แฃแแแแแ.
UNION
แแฃ แกแแแแแแซแ แกแแขแงแแ แแแแฅแแก แจแแแแแฎแแแจแ UNION [ALL]
(แแ แ แแแแฃแจแแก แจแแแ แแแแแก แแแแ แแขแแ แ), แจแแแแแ แแแแแแจแ แแแ แจแแแกแแแแแแแ แ แแแแแแแ แแแแแซแก Append
, แแ แแแแแแ แแ Recursive Union
.
แแก, แ แแช แแแแแ แแ แแก "แแแแแ". UNION
- แแก แแ แแก แฉแแแแ แแแแแซแแก แแแ แแแแ แจแแแแแแแแแแ, แ แแแแแแช แแ แแก "แฅแแแแแ" - แแแแ แ. แแฃ แแแจแแแแแแ UNION
แฉแแแ แแแแฅแแก แแ แแแ แแฃแแแ แ แแแแแแแแ แแแแแ "แแแฌแแแแแฃแแ". Append
- แฏแแ แแแแแ แแฅแแแแ แแฎแแแแ แแ แแ แแแแแซแ, แแแแ แแ แแแก แแงแแแแแ แแ แ แแ แ, แแ แแแแ แแแแ แ แจแแแแ - แจแแกแแแแแแกแแ, แแแแแแแแแแ แแแแ:
(...) -- #1
UNION ALL
(...) -- #2
UNION ALL
(...) -- #3
Append
-> ... #1
-> ... #2
-> ... #3
แแแ แกแแแแแแแก แแ แแแแแแ: แ แแแฃแ แกแแฃแแ แจแแ แฉแแแแก แแแแแแก แจแแแแแ (WITH RECURSIVE
) แแกแแแ แจแแแซแแแแ แแงแแก แแ แแแ แแแขแ UNION
. แแแแ แแ แแฎแแแแ แแแแ แแแแแ แฃแแแแแกแแแแแแก แจแแแแแ แงแแแแแแแแก แ แแแฃแ แกแแฃแแแ UNION
. แงแแแแแคแแ แ แแแแแ แแ แแก แแ แแ, แแแแ แแ แแแแกแฎแแแแแแฃแแ UNION
:
WITH RECURSIVE T AS(
(...) -- #1
UNION ALL
(...) -- #2, ััั ะบะพะฝัะฐะตััั ะณะตะฝะตัะฐัะธั ััะฐััะพะฒะพะณะพ ัะพััะพัะฝะธั ัะตะบัััะธะธ
UNION ALL
(...) -- #3, ัะพะปัะบะพ ััะพั ะฑะปะพะบ ัะตะบัััะธะฒะฝัะน ะธ ะผะพะถะตั ัะพะดะตัะถะฐัั ะพะฑัะฐัะตะฝะธะต ะบ T
)
...
แแฅแแแ แแกแแแ แฃแแแ แจแแซแแแ แแกแแแ แแแแแแแแแแแก โแแแแแ แฉแแแโ. แแ แแแแแแแแจแ แฉแแแ แแฎแแแแแ, แ แแ UNION
-แฉแแแแก แแแแฎแแแแแจแ แแงแ 3 แกแแแแแแขแ. แจแแกแแแแแแกแแ, แแ แแ UNION
แจแแแกแแแแแแแ Append
- แแแแแซแ แแ แแแแ แ - Recursive Union
.
แแแแแชแแแแแแก แฌแแแแแฎแแ-แฉแแฌแแ แ
แงแแแแแคแแ แ แฉแแแแงแแแแแแแฃแแแ, แแฎแแ แฉแแแ แแแชแแ, แแแแฎแแแแแก แ แแแแแ แแแฌแแแ แจแแแกแแแแแแแ แแแแแแก แ แแแแ แแแฌแแแก. แแ แแ แแแฌแแแแแจแ แฉแแแ แจแแแแแซแแแ แแแ แขแแแแ แแ แแฃแแแแ แแแแ แแแแแแแ แแก แแแแแฅแขแแแ, แ แแแแแแแช "แแแแแฎแแแแแ".
แจแแแแแฎแแแก แแแแแกแแแ แแกแแ, แฉแแแ แแ แแแชแแ, แแ แแก แแก แชแฎแ แแแ แแฃ CTE, แแแแ แแ แแกแแแ แแแแแแแแฃแแแ แแแแแ แแแแแซแแ RangeVar
. แแ "แฌแแแแแฎแแแก" แแแแแกแแแ แแกแแ, แแก แแกแแแ แแ แแก แแแแแซแแแแก แกแแแแแแ แจแแแฆแฃแแฃแแ แแแแ แแแ:
Seq Scan on [tbl]
Bitmap Heap Scan on [tbl]
Index [Only] Scan [Backward] using [idx] on [tbl]
CTE Scan on [cte]
Insert/Update/Delete on [tbl]
แฉแแแ แแแชแแ แแแแแแกแ แแ แแแแฎแแแแแก แกแขแ แฃแฅแขแฃแ แ, แแแชแแ แแแแแแแแก แจแแกแแแแแแกแแแ, แแแชแแ แแแแแฅแขแแแแก แกแแฎแแแแแ - แแแแแแแแ แแ แ-แแ แ แจแแแแ แแแแก.
แแกแแ แแแแแแแแ "แแแ แกแแแแแแแ". แฉแแแ แแแฆแแแ แแแแฎแแแแแก, แแแกแ แฃแแแแ แแแก, แฉแแแ แแ แแแแฅแแก แ แแแแ แแแขแกแแฎแแแ - แฃแแ แแแแ แแ แฏแแ แแแแแฎแฃแแแแ แแแแแ CTE-แแแ.
แฉแแแ แแฃแงแฃแ แแแ แแแแแแก - แ แ แแ แแแแแแแ? แ แแขแแ แแแฅแแแแ แแแขแกแแฎแแแ? แฉแแแ แแ แจแแฃแแแแแแ. แกแแแแแ แแฆแแแก แแแก แแกแแแ "แแแแ แแก แแแแแ แ"?
PostgreSQL แแแแก แแแแแ แแแแขแแแก. แแฅแแแ แแฎแแแแ แแแแก แแแแแแ แแญแแ แแแแแ แฃแแ แแแแ แแกแแแ แแแขแกแแฎแแแ แฉแแแแแแแก, แแแแแแกแแแ แจแแแแ แแแแก แแแแแแ, แแแ แ แแ แแฅแแก, แฃแแ แแแแ แแฅ แแ แแก แแแแแขแแแฃแแ. แแฃ แแแแแฅแชแแแ แแแก แงแฃแ แแแฆแแแแก.
แแแแ แ แแแแแแแแ "แแแ แกแแแแแแแ": แแฃ แแแแแฎแฃแแแแ แแแแแฌแแแ แแแฃแแ แชแฎแ แแแแแแ, แแแจแแ แแแแแฆแแแ แแแแแซแก Append
แแ Merge Append
, แ แแแแแแช แจแแแแแแ แแแแ แ แแแแแแแแแ โแแแแจแแแแแกแแแโ แแ แ แแแแแแแแแ แแแแแแฃแแ แ แแแแ แฆแแช แแฅแแแแ Scan
om แแแแแแแก แแแแงแแคแแแแแแแแ: Seq Scan
, Bitmap Heap Scan
แแ Index Scan
. แแแแ แแ, แแแแแกแแแแ แจแแแแฎแแแแแจแ, แแก โแแแแจแแแแโ แแ แแฅแแแแ แ แแฃแแ แแแแฎแแแแแแ - แแกแ แจแแแซแแแแ แแแแแแกแฎแแแแแ แแก แแแแแซแแแ Append
แแ UNION
.
แฉแแแ แแกแแแ แแแแกแแแก แแกแแแ แแแแแซแแแ, แแแแ แแแแแ แแแ "แแ แ แฌแงแแแแจแ" แแ แแแแแแแ:แงแแแแแคแแ แ, แ แแกแแช แแแแแขแแแแแแแ แแแแฎแฃแแแแ, แแ แแก แแฅ แแ แฎแแแ".
"แแแ แขแแแ" แแแแแชแแแแ แแแแฆแแแ แแแแแซแแแ
Values Scan
แแแแแแจแ แจแแแกแแแแแแแ VALUES
แแแแฎแแแแแจแ.
Result
แแ แแก แแแแฎแแแแ แแแ แแจแ FROM
แแแแฌแแแก SELECT 1
. แแ แ แแแแกแแช แแฅแแแ แแแฅแแ แแแแแ แแฎ แชแ แฃ แแแแแฎแแขแแ WHERE
-แแแแแ (แจแแแแแ แแแแแฉแแแแแ แแขแ แแแฃแขแ One-Time Filter
):
EXPLAIN ANALYZE
SELECT * FROM pg_class WHERE FALSE; -- ะธะปะธ 0 = 1
Result (cost=0.00..0.00 rows=0 width=230) (actual time=0.000..0.000 rows=0 loops=1)
One-Time Filter: false
Function Scan
โแ แฃแแโ แแแแแ แกแแฎแแแฌแแแแแแก SRF-แแแแ.
แแแแ แแ แฉแแกแแฃแแ แแแแฎแแแแแ แงแแแแแคแแ แ แฃแคแ แ แ แแฃแแแ - แกแแแฌแฃแฎแแ แแ, แแกแแแ แงแแแแแแแแก แแ แแฅแชแแแแแ InitPlan
/SubPlan
. แแแแฏแแ แแกแแแ แแแแแแฅแชแแแแแ ... Join
แแ ... Anti Join
, แแแแกแแแฃแแ แแแแ แแแจแแ, แ แแชแ แฌแแ แ แแฆแแชแแก WHERE NOT EXISTS ...
. แแ แแฅ แงแแแแแแแแก แแ แแ แแก แจแแกแแซแแแแแแ แแแแ แแแแ แแแแแแแ - แแแแแแก แขแแฅแกแขแจแ แแ แแ แแก แแแแแแก แแแแแซแแแแก แจแแกแแแแแแกแ แแแแ แแขแแ แแแ.
แแกแแ แแแแแแแแ "แแแ แกแแแแแแแ": แแแแแแ แแ VALUES
แแแแฎแแแแแจแ. แแ แจแแแแฎแแแแแจแ แแ แแแแแแจแ แแแแฆแแแ แ แแแแแแแแ แแแแแซแก Values Scan
.
"แแแแแแ แแแ" แกแฃแคแแฅแกแแแ แแแแแฎแแแ แแแแ แแ แแแแแแแแกแแแ แแแแแกแฎแแแแแ - แแกแแแ แแแแขแแแ แแฃแกแขแแ แแ แแแแแแแแแแ แแแแ, แ แแแแแแแช แแแฎแแแแแ แจแแกแแแแแแกแ. VALUES
-แแแแแแแก แแแแฎแแแแแก แแแกแฌแแ แแ แแแแแแแ แฅแแแแแแแ.
แแแแแชแแแแ แแแแฃแจแแแแแ
แ แแแแ แช แฉแแแก, แฉแแแแก แแแแฎแแแแแจแ แงแแแแแคแแ แ แแแแแแแแฃแแแ - แแแ แฉแ แแฎแแแแ Limit
.
แแแแ แแ แแฅ แงแแแแแคแแ แ แแแ แขแแแแ - แแกแแแ แแแแแซแแแ, แ แแแแ แแชแแ Limit
, Sort
, Aggregate
, WindowAgg
, Unique
แแแแฎแแแแแก แจแแกแแแแแแก แแแแ แแขแแ แแแก, แแฃ แแกแแแ แแฅ แแ แแแ. แแฅ แแ แแ แแก "แแแ แกแแแแแแแแ" แแ แกแแ แแฃแแแแแ.
แจแแแแแแแแ แแแแ
แกแแ แแฃแแแแแ แฌแแ แแแแฅแแแแแ แแแจแแ, แ แแแแกแแช แแแแแแ แแแแ แแแแแแแ JOIN
แแแ แจแแ แแก. แแก แงแแแแแแแแก แแ แแ แแก แจแแกแแซแแแแแแ, แแแแ แแ แจแแกแแซแแแแแแแ.
แจแแแแแฎแแแก แแแแแแแแขแแ แแก แแแแแกแแแ แแกแแ, แฉแแแ แแแแฅแแก แแแแแซแ JoinExpr
, แ แแแแแกแแช แแฃแกแขแแ แแ แ แจแแแแ แฐแงแแแก - แแแ แชแฎแแแ แแ แแแ แฏแแแแ. แแก, แจแแกแแแแแแกแแ, แแ แแก แแก, แ แแช แแ แแก "แแแแแ" แแฅแแแแ JOIN แแ แ แ แฌแแ แแ "แฅแแแแแ" แแแแฎแแแแแจแ.
แแ แแแแแแก แแแแแกแแแ แแกแแ, แแก แแแแแแ แแแก แแ แ แจแแแแแแแแแแแ * Loop
/* Join
- แแแแแซแ. Nested Loop
, Hash Anti Join
,... - แ แแฆแแช แแแแแแแแแ แ.
แแแแแ แแแแแแแงแแแแ แแแ แขแแแ แแแแแแ: แแฃ แแแแฅแแก A แแ B แชแฎแ แแแแแ, แ แแแแแแแช แแ แแแแแแแก โแฃแแ แแแแแแแโ แแแแแแจแ, แแแจแแ แแแแฎแแแแแจแ แแกแแแ แจแแแซแแแแ แแแแแแแกแแแก. A-JOIN-B
แแ B-JOIN-A
. แแชแแแแ แแแแแแ แแแแแแ แแกแ, แแแชแแแแ แแแแแแ แแแแแแ แแแ แแฅแแ แแ แแกแ แแแแแแ แซแแแแ แแแแแ, แกแแแแ แแกแแแ แฌแงแแแแแแ แแ แแแแแแ.
แแแแฆแแ แฉแแแแ แกแแแขแแฅแกแแก แฎแ, แแแแฆแแ แฉแแแแ แแแแแ, แจแแแฎแแแแ แแแ... แแ แ แแกแแแแกแ!
แแแแแ แแแแแแแฎแแแแ แแแ แแ แแคแแแแแแก แกแแฎแแ - แแฐ, แแก แฃแแแ แ แแฆแแชแแก แฐแแแแก!
แแฆแแแแจแแแ, แ แแ แแแแฅแแก แแแแแซแแแ, แ แแแแแแกแแช แแ แแแ แแฃแแแ แฐแงแแแ แจแแแแแแ B แแ C - แแ แแแแแแขแแ แแกแแแก แ แ แแแแแแแแแแ แแแแ. แแแแแ แแแแแแ แแแแแแ แแกแแแ แแ แแแแแแแแ แฃแแแ แแแแแซแแก แกแฃแ แแแ.
แแแแแ แแแแแ แแ แแฎแแ แแแแแแฎแแแแ. แแฎแแ แฉแแแ แแแแฅแแก แแแแแซแแแ แแแแจแแแแแแ A แแ แฌแงแแแแแแแ (B + C) - แแแแกแแแแแ แแแแแแแแช.
แแแแ! แแฃแ แแ แแก แแ แ แแแ แ JOIN
แแแแฎแแแแแแแ แแแแแแก แแแแแซแแแ แฌแแ แแแขแแแแ แแแแ แแแแแแ.
แกแแแฌแฃแฎแแ แแ, แแก แแ แแแแแแ แงแแแแแแแแก แแ แฌแงแแแแ.
แแแแแแแแแ, แแฃ แแแแฎแแแแแจแ A JOIN B JOIN C
, แแ แแแแแแจแ แฃแแแ แแแแแก แงแแแแแกแ, "แแแ แ" แแแแแซแแแ A แแ C แแงแ แแแแแแจแแ แแแฃแแ. แแแแ แแ แแแแฎแแแแแจแ แแ แแ แแก แแกแแแ แแแแ แแขแแ แ, แแ แแคแแ แ แแแแฅแแก แฎแแแแแกแแฃแแ, แแแแแจแแแแ แแ แแคแแ แ แแแแฅแแก. แแแแแแ โแแซแแแแโ แ แแชแ แฌแแ A, B
.
แแแแ แแ, แฃแแแขแแก แจแแแแฎแแแแแจแ, แแแแฅแแแก แงแแแแ แแแแแซแ แจแแแซแแแแ โแแแแฎแกแแแกโ แแ แจแแแแซแแแแ แแ แแฃแแแ แแแแฆแแ แแ แขแแแแก แแ แแคแแแแ แแแ แแแ แชแฎแแแ - แกแแขแงแแแกแแขแงแแแ, แ แแแแ แช Google Chrome-แจแ, แ แแแแกแแช แแแแแแแแแแ JavaScript แแแแก. แแฅแแแ แฎแแแแแ, แ แแแแแแ แแ แ แแแกแญแแ แแ แแแแแแฃแ แกแขแ แแฅแแแก แแ แแแแแแฃแ แแแแชแฎแแแแแแก "แจแแกแ แฃแแแแแก".
แแ แแแแกแแแแแก, แ แแ แแฅแแแแแแแก แฃแคแ แ แแแกแแฎแแ แฎแแแแแ แแงแแก แแ แงแแแแแคแ แแก แแแแแงแแแแแ, แฉแแแ แแแแแแแแแ แกแแชแแแ
แแฃ แแฅแแแ แฃแแ แแแแ แแญแแ แแแแแ แฌแแฃแแแแฎแแแ แจแแแแแฎแแ แแแแแแแขแฃแ แคแแ แแแจแ แแแงแแแแ, แแแแแแงแแแแ
แฌแงแแ แ: www.habr.com