EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€

เช•เซเชฒเชพเชธเชฟเช• เชชเซเชฐเชถเซเชจ เช•เซ‡ เชœเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชคเซ‡เชจเชพ DBA เช…เชฅเชตเชพ เชตเซเชฏเชตเชธเชพเชฏ เชฎเชพเชฒเชฟเช•เชจเซ‡ เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เชธเชฒเชพเชนเช•เชพเชฐ เชชเชพเชธเซ‡ เชฒเชพเชตเซ‡ เช›เซ‡ เชคเซ‡ เชฒเช—เชญเช— เชนเช‚เชฎเซ‡เชถเชพ เชธเชฎเชพเชจ เชฒเชพเช—เซ‡ เช›เซ‡: "เชตเชฟเชจเช‚เชคเชฟเช“ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เชชเซ‚เชฐเซเชฃ เชฅเชตเชพเชฎเชพเช‚ เช†เชŸเชฒเซ‹ เชฒเชพเช‚เชฌเซ‹ เชธเชฎเชฏ เช•เซ‡เชฎ เชฒเซ‡ เช›เซ‡?"

เชชเชฐเช‚เชชเชฐเชพเช—เชค เช•เชพเชฐเชฃเซ‹เชจเซ‹ เชธเชฎเซ‚เชน:

  • เชฌเชฟเชจเช•เชพเชฐเซเชฏเช•เซเชทเชฎ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชจเซ‹
    เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชนเชœเชพเชฐเซ‹ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชชเชฐ เช•เซ‡เชŸเชฒเชพเช• CTE เชฎเชพเช‚ เชœเซ‹เชกเชพเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซ‹ เช›เซ‹
  • เชœเซ‚เชจเชพ เช†เช‚เช•เชกเชพ
    เชœเซ‹ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซเช‚ เชตเชพเชธเซเชคเชตเชฟเช• เชตเชฟเชคเชฐเชฃ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เช›เซ‡เชฒเซเชฒเซ€ เชตเช–เชค เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชฆเซเชตเชพเชฐเชพ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒเชพ เชกเซ‡เชŸเชพ เช•เชฐเชคเชพ เช˜เชฃเซเช‚ เช…เชฒเช— เช›เซ‡
  • เชธเช‚เชธเชพเชงเชจเซ‹ เชชเชฐ "เชชเซเชฒเช—".
    เช…เชจเซ‡ CPU เชจเซ€ เชธเชฎเชฐเซเชชเชฟเชค เช•เชฎเซเชชเซเชฏเซเชŸเชฟเช‚เช— เชถเช•เซเชคเชฟ เชนเชตเซ‡ เชชเซ‚เชฐเชคเซ€ เชจเชฅเซ€, เช—เซ€เช—เชพเชฌเชพเช‡เชŸเซเชธ เชฎเซ‡เชฎเชฐเซ€ เชธเชคเชค เชชเชฎเซเชช เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชฅเชตเชพ เชกเชฟเชธเซเช• เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชฌเชงเซ€ "เช‡เชšเซเช›เชพเช“" เชธเชพเชฅเซ‡ เชฐเชพเช–เซ€ เชถเช•เชคเซ€ เชจเชฅเซ€
  • เช…เชตเชฐเซ‹เชงเชฟเชค เชธเซเชชเชฐเซเชงเชพเชคเซเชฎเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชฎเชพเช‚เชฅเซ€

เช…เชจเซ‡ เชœเซ‹ เชฌเซเชฒเซ‹เช•เซ€เช‚เช—เซเชธเชจเซ‡ เชชเช•เชกเชตเชพ เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเซเช‚ เช–เซ‚เชฌ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เช†เชชเชฃเชจเซ‡ เชœเชฐเซ‚เชฐเซ€ เชฆเชฐเซ‡เช• เชตเชธเซเชคเซ เชฎเชพเชŸเซ‡ เชชเซเชฐเชถเซเชจ เชฏเซ‹เชœเชจเชพ, เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช“เชชเชฐเซ‡เชŸเชฐเชจเซ‡ เชธเชฎเชœเชพเชตเซ‹ (เชคเซ‡ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡, เช…เชฒเชฌเชคเซเชค, เชคเชฐเชค เชœ เชธเชฎเชœเชพเชตเชตเซเช‚ (เชตเชฟเชถเซเชฒเซ‡เชทเชฃ, เชฌเชซเชฐเซเชธ) ...) เช…เชฅเชตเชพ auto_explain เชฎเซ‹เชกเซเชฏเซเชฒ.

เชชเชฐเช‚เชคเซ, เชธเชฎเชพเชจ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชฎเชพเช‚ เชœเชฃเชพเชตเซเชฏเชพ เชฎเซเชœเชฌ,

"เชฏเซ‹เชœเชจเชพเชจเซ‡ เชธเชฎเชœเชตเซ€ เช เชเช• เช•เชณเชพ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชจเชฟเชชเซเชฃเชคเชพ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เชšเซ‹เช•เซเช•เชธ เช…เชจเซเชญเชตเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡..."

เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชฏเซ‹เช—เซเชฏ เชธเชพเชงเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹ เชคเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเชพ เชตเชฟเชจเชพ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹!

เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฒเชพเชจ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เซ‡เชตเซ‹ เชฆเซ‡เช–เชพเชฏ เช›เซ‡? เชคเซ‡เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เช‡เช•:

Index Scan using pg_class_relname_nsp_index on pg_class (actual time=0.049..0.050 rows=1 loops=1)
  Index Cond: (relname = $1)
  Filter: (oid = $0)
  Buffers: shared hit=4
  InitPlan 1 (returns $0,$1)
    ->  Limit (actual time=0.019..0.020 rows=1 loops=1)
          Buffers: shared hit=1
          ->  Seq Scan on pg_class pg_class_1 (actual time=0.015..0.015 rows=1 loops=1)
                Filter: (relkind = 'r'::"char")
                Rows Removed by Filter: 5
                Buffers: shared hit=1

เช…เชฅเชตเชพ เช†เชจเซ€ เชœเซ‡เชฎ:

"Append  (cost=868.60..878.95 rows=2 width=233) (actual time=0.024..0.144 rows=2 loops=1)"
"  Buffers: shared hit=3"
"  CTE cl"
"    ->  Seq Scan on pg_class  (cost=0.00..868.60 rows=9972 width=537) (actual time=0.016..0.042 rows=101 loops=1)"
"          Buffers: shared hit=3"
"  ->  Limit  (cost=0.00..0.10 rows=1 width=233) (actual time=0.023..0.024 rows=1 loops=1)"
"        Buffers: shared hit=1"
"        ->  CTE Scan on cl  (cost=0.00..997.20 rows=9972 width=233) (actual time=0.021..0.021 rows=1 loops=1)"
"              Buffers: shared hit=1"
"  ->  Limit  (cost=10.00..10.10 rows=1 width=233) (actual time=0.117..0.118 rows=1 loops=1)"
"        Buffers: shared hit=2"
"        ->  CTE Scan on cl cl_1  (cost=0.00..997.20 rows=9972 width=233) (actual time=0.001..0.104 rows=101 loops=1)"
"              Buffers: shared hit=2"
"Planning Time: 0.634 ms"
"Execution Time: 0.248 ms"

เชชเชฐเช‚เชคเซ "เชถเซ€เชŸเชฎเชพเช‚เชฅเซ€" เชŸเซ‡เช•เซเชธเซเชŸเชฎเชพเช‚ เชฏเซ‹เชœเชจเชพ เชตเชพเช‚เชšเชตเซ€ เช–เซ‚เชฌ เชฎเซเชถเซเช•เซ‡เชฒ เช…เชจเซ‡ เช…เชธเซเชชเชทเซเชŸ เช›เซ‡:

  • เชจเซ‹เชกเชฎเชพเช‚ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชพเชฏ เช›เซ‡ เชธเชฌเชŸเซเชฐเซ€ เชธเช‚เชธเชพเชงเชจเซ‹ เชฆเซเชตเชพเชฐเชพ เชธเชฐเชตเชพเชณเซ‹
    เชเชŸเชฒเซ‡ เช•เซ‡, เช•เซ‹เชˆ เชšเซ‹เช•เซเช•เชธ เชจเซ‹เชกเชจเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹ เช›เซ‡, เช…เชฅเชตเชพ เชŸเซ‡เชฌเชฒเชฎเชพเช‚เชฅเซ€ เช† เชตเชพเช‚เชšเชจ เชกเชฟเชธเซเช•เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชฒเชพเชตเซเชฏเซ‹ เช›เซ‡ เชคเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชฌเซ€เชœเชพเชฎเชพเช‚เชฅเซ€ เชเช• เชฌเชพเชฆเชฌเชพเช•เซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
  • เชจเซ‹เชก เชธเชฎเชฏ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ เชฒเซ‚เชชเซเชธ เชฆเซเชตเชพเชฐเชพ เช—เซเชฃเชพเช•เชพเชฐ เช•เชฐเซ‹
    เชนเชพ, เชฌเชพเชฆเชฌเชพเช•เซ€ เช เชธเซŒเชฅเซ€ เชœเชŸเชฟเชฒ เช•เชพเชฎเช—เซ€เชฐเซ€ เชจเชฅเซ€ เชœเซ‡ "เชฎเชพเชฅเชพเชฎเชพเช‚" เชฅเชตเซ€ เชœเซ‹เชˆเช - เช›เซ‡เชตเชŸเซ‡, เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจเชจเซ‹ เชธเชฎเชฏ เชจเซ‹เชกเชจเชพ เชเช• เช…เชฎเชฒ เชฎเชพเชŸเซ‡ เชธเชฐเซ‡เชฐเชพเชถ เชคเชฐเซ€เช•เซ‡ เชธเซ‚เชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชธเซ‡เช‚เช•เชกเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.
  • เชธเชพเชฐเซเช‚, เช…เชจเซ‡ เช† เชฌเชงเซเช‚ เชฎเชณเซ€เชจเซ‡ เช…เชฎเชจเซ‡ เชฎเซเช–เซเชฏ เชชเซเชฐเชถเซเชจเชจเซ‹ เชœเชตเชพเชฌ เช†เชชเชคเชพ เช…เชŸเช•เชพเชตเซ‡ เช›เซ‡ - เชคเซ‡เชฅเซ€ เช•เซ‹เชฃ "เชธเซŒเชฅเซ€ เชจเชฌเชณเซ€ เช•เชกเซ€"?

เชœเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เช•เซ‡เชŸเชฒเชพเช• เชธเซ‹ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เชจเซ‡ เช† เชฌเชงเซเช‚ เชธเชฎเชœเชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซเชฏเซ‹, เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเชจเซ‡ เชธเชฎเชœเชพเชฏเซเช‚ เช•เซ‡ เชฌเชนเชพเชฐเชฅเซ€ เชคเซ‡ เช•เช‚เชˆเช• เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡:

EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€

เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช เช•เซ‡ เช†เชชเชฃเชจเซ‡ เชœเชฐเซ‚เชฐ เช›เซ‡ ...

เชŸเซ‚เชฒ

เชคเซ‡เชฎเชพเช‚ เช…เชฎเซ‡ เชคเชฎเชพเชฎ เชฎเซเช–เซเชฏ เชฎเชฟเช•เซ‡เชจเชฟเช•เซเชธ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซเชฏเซ‹ เชœเซ‡ เชฏเซ‹เชœเชจเชพ เช…เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€ เช…เชจเซเชธเชพเชฐ "เช•เซ‹เชฃ เชฆเซ‹เชท เช…เชจเซ‡ เชถเซเช‚ เช•เชฐเชตเซเช‚" เชธเชฎเชœเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเซ‡ เช›เซ‡. เชธเชพเชฐเซเช‚, เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เช…เชจเซเชญเชตเชจเซ‹ เชเช• เชญเชพเช— เชธเชฎเซเชฆเชพเชฏ เชธเชพเชฅเซ‡ เชถเซ‡เชฐ เช•เชฐเซ‹.
เชฎเชณเซ‹ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ - explain.tensor.ru

เชฏเซ‹เชœเชจเชพเช“เชจเซ€ เชฆเซƒเชถเซเชฏเชคเชพ

เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฒเชพเช—เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชถเซเช‚ เชฏเซ‹เชœเชจเชพเชจเซ‡ เชธเชฎเชœเชตเซเช‚ เชธเชฐเชณ เช›เซ‡?

Seq Scan on pg_class (actual time=0.009..1.304 rows=6609 loops=1)
  Buffers: shared hit=263
Planning Time: 0.108 ms
Execution Time: 1.800 ms

เช–เชฐเซ‡เช–เชฐ เชจเชฅเซ€.

เชชเชฃ เช†เชจเซ€ เชœเซ‡เชฎ, เชธเช‚เช•เซเชทเชฟเชชเซเชค เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚เชœเซเชฏเชพเชฐเซ‡ เชฎเซเช–เซเชฏ เชธเซ‚เชšเช•เชพเช‚เช•เซ‹เชจเซ‡ เช…เชฒเช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชตเชงเซ เชธเซเชชเชทเซเชŸ เช›เซ‡:

EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€

เชชเชฐเช‚เชคเซ เชœเซ‹ เชฏเซ‹เชœเชจเชพ เชตเชงเซ เชœเชŸเชฟเชฒ เช›เซ‡, เชคเซ‹ เชคเซ‡ เชฌเชšเชพเชตเชฎเชพเช‚ เช†เชตเชถเซ‡ เชชเชฟเชšเชพเชฐเซเชŸ เชธเชฎเชฏ เชตเชฟเชคเชฐเชฃ เช—เชพเช‚เช เซ‹ เชฆเซเชตเชพเชฐเชพ:

EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€

เช เซ€เช• เช›เซ‡, เชธเซŒเชฅเซ€ เชฎเซเชถเซเช•เซ‡เชฒ เชตเชฟเช•เชฒเซเชชเซ‹ เชฎเชพเชŸเซ‡ เชคเซ‡ เชฎเชฆเชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชคเชพเชตเชณเชฎเชพเช‚ เช›เซ‡ เชชเซเชฐเช—เชคเชฟ เชšเชพเชฐเซเชŸ:

EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเซเชฏเชพเช‚ เชคเชฆเซเชฆเชจ เชฌเชฟเชจ-เชคเซเชšเซเช› เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชฏเซ‹เชœเชจเชพเชฎเชพเช‚ เชเช• เช•เชฐเชคเชพเช‚ เชตเชงเซ เชตเชพเชธเซเชคเชตเชฟเช• เชฎเซ‚เชณ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡:

EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€

เชฎเชพเชณเช–เชพเช•เซ€เชฏ เชธเช‚เช•เซ‡เชคเซ‹

เช เซ€เช• เช›เซ‡, เชœเซ‹ เชฏเซ‹เชœเชจเชพเชจเซเช‚ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฎเชพเชณเช–เซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชซเซ‹เชฒเซเชฒเซ€เช“ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชจเชพเช–เซ‡เชฒเซ€ เช›เซ‡ เช…เชจเซ‡ เชฆเซƒเชถเซเชฏเชฎเชพเชจ เช›เซ‡, เชคเซ‹ เชถเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เชจ เช•เชฐเซ‹ เช…เชจเซ‡ "เชฐเชถเชฟเชฏเชจ เชญเชพเชทเชพ" เชฎเชพเช‚ เชธเชฎเชœเชพเชตเซ‹?

EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€เช…เชฎเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เช†เชตเชพ เช•เซ‡เชŸเชฒเชพเช• เชกเชเชจ เชญเชฒเชพเชฎเชฃ เชจเชฎเซ‚เชจเชพเช“ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซเชฏเชพ เช›เซ‡.

เชฒเชพเช‡เชจ-เชฌเชพเชฏ-เชฒเชพเช‡เชจ เช•เซเชตเซ‡เชฐเซ€ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฐ

เชนเชตเซ‡, เชœเซ‹ เชคเชฎเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฟเชค เชฏเซ‹เชœเชจเชพ เชชเชฐ เชฎเซ‚เชณ เช•เซเชตเซ‡เชฐเซ€ เชธเซเชชเชฐเช‡เชฎเซเชชเซ‹เช เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เชฆเชฐเซ‡เช• เชตเซเชฏเช•เซเชคเชฟเช—เชค เชจเชฟเชตเซ‡เชฆเชจ เชชเชฐ เช•เซ‡เชŸเชฒเซ‹ เชธเชฎเชฏ เชตเชฟเชคเชพเชตเซเชฏเซ‹ เชนเชคเซ‹ - เช•เช‚เชˆเช• เช†เชจเชพ เชœเซ‡เชตเซเช‚:

EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€

...เช…เชฅเชตเชพ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชชเชฃ:

EXPLAIN เชถเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฎเซŒเชจ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€

เชตเชฟเชจเช‚เชคเชฟเชฎเชพเช‚ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‡ เชฌเชฆเชฒเซ€เชจเซ‡

เชœเซ‹ เชคเชฎเซ‡ เชฒเซ‹เช—เชจเซ€ เชกเซ€เชŸเซ‡เช‡เชฒ เชฒเชพเช‡เชจเชฎเชพเช‚เชฅเซ€ เชฎเชพเชคเซเชฐ เชชเซเชฒเชพเชจเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เชœ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‡ เชชเชฃ "เชœเซ‹เชกเซเชฏเชพ" เช›เซ‹, เชคเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชตเชฟเช•เชฒเซเชชเซ‹เชฎเชพเช‚ เช•เซ‰เชชเชฟ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

  • เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชฎเซ‚เชฒเซเชฏ เช…เชตเซ‡เชœเซ€ เชธเชพเชฅเซ‡
    เชคเชฎเชพเชฐเชพ เช†เชงเชพเชฐ เช…เชจเซ‡ เชตเชงเซ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเชฟเช‚เช— เชชเชฐ เชธเซ€เชงเชพ เช…เชฎเชฒ เชฎเชพเชŸเซ‡

    SELECT 'const', 'param'::text;
  • PREPARE/EXECUTE เชฎเชพเชฐเชซเชคเซ‡ เชฎเซ‚เชฒเซเชฏ เช…เชตเซ‡เชœเซ€ เชธเชพเชฅเซ‡
    เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐเชจเชพ เช•เชพเชฐเซเชฏเชจเซเช‚ เช…เชจเซเช•เชฐเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชœเซเชฏเชพเชฐเซ‡ เชชเซ‡เชฐเชพเชฎเซ‡เชŸเซเชฐเชฟเช• เชญเชพเช—เชจเซ‡ เช…เชตเช—เชฃเซ€ เชถเช•เชพเชฏ เช›เซ‡ - เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชชเชพเชฐเซเชŸเซ€เชถเชจ เช•เชฐเซ‡เชฒ เช•เซ‹เชทเซเชŸเช•เซ‹ เชชเชฐ เช•เชพเชฎ เช•เชฐเชตเซเช‚

    DEALLOCATE ALL;
    PREPARE q(text) AS SELECT 'const', $1::text;
    EXECUTE q('param'::text);
    

เชฏเซ‹เชœเชจเชพเช“เชจเซเช‚ เช†เชฐเซเช•เชพเช‡เชต

เชชเซ‡เชธเซเชŸ เช•เชฐเซ‹, เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ‹, เชธเชนเช•เชฐเซเชฎเซ€เช“ เชธเชพเชฅเซ‡ เชถเซ‡เชฐ เช•เชฐเซ‹! เชฏเซ‹เชœเชจเชพเช“ เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚ เชฐเชนเซ‡เชถเซ‡, เช…เชจเซ‡ เชคเชฎเซ‡ เชชเช›เซ€เชฅเซ€ เชคเซ‡เชฎเชจเชพ เชชเชฐ เชชเชพเช›เชพ เช†เชตเซ€ เชถเช•เซ‹ เช›เซ‹: explain.tensor.ru/archive

เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เช‡เชšเซเช›เชคเชพ เชจเชฅเซ€ เช•เซ‡ เช…เชจเซเชฏ เชฒเซ‹เช•เซ‹ เชคเชฎเชพเชฐเซ‹ เชชเซเชฒเชพเชจ เชœเซเช, เชคเซ‹ "เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚" เชฌเซ‰เช•เซเชธเชจเซ‡ เชšเซ‡เช• เช•เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚.

เชจเซ€เชšเซ‡เชจเชพ เชฒเซ‡เช–เซ‹เชฎเชพเช‚ เชนเซเช‚ เชฏเซ‹เชœเชจเชพเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชŠเชญเซ€ เชฅเชคเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เช…เชจเซ‡ เชจเชฟเชฐเซเชฃเชฏเซ‹ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€เชถ.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹