Π—Π° ΠΊΠ°ΠΊΠ²ΠΎ EXPLAIN ΠΌΡŠΠ»Ρ‡ΠΈ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΊΠ°Ρ€Π°ΠΌΠ΅ Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈ

ΠšΠ»Π°ΡΠΈΡ‡Π΅ΡΠΊΠΈΡΡ‚ Π²ΡŠΠΏΡ€ΠΎΡ, ΠΊΠΎΠΉΡ‚ΠΎ програмист Π·Π°Π΄Π°Π²Π° Π½Π° своя DBA ΠΈΠ»ΠΈ собствСник Π½Π° бизнСс Π½Π° консултант Π½Π° PostgreSQL, ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π·Π²ΡƒΡ‡ΠΈ ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½: β€žΠ—Π°Ρ‰ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° заявкитС Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚Π½Π΅ΠΌΠ° Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅?β€œ

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ:

  • Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ
    ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π΄Π° сС ПРИБΠͺΠ•Π”Π˜ΠΠ•Π’Π• към няколко CTE Π½Π°Π΄ няколко дСсСтки хиляди записа
  • остаряла статистика
    Π°ΠΊΠΎ дСйствитСлното Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π²Π΅Ρ‡Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°, ΡΡŠΠ±Ρ€Π°Π½ΠΎ ΠΎΡ‚ ANALYZE послСдния ΠΏΡŠΡ‚
  • β€žΠ²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅β€œ Π½Π° рСсурси
    ΠΈ Π²Π΅Ρ‡Π΅ няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ спСциална изчислитСлна мощност Π½Π° процСсора, Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ сС ΠΈΠ·ΠΏΠΎΠΌΠΏΠ²Π°Ρ‚ постоянно ΠΈΠ»ΠΈ Π΄ΠΈΡΠΊΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС справи с всички β€žΠΆΠ΅Π»Π°Π½ΠΈΡβ€œ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ
  • Π±Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€Π°Ρ‰ΠΈ сС процСси

И Π°ΠΊΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈΡ‚Π΅ са доста Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° улавянС ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, Ρ‚ΠΎ Π·Π° всичко останало Π½ΠΈ трябва ΠΏΠ»Π°Π½ Π·Π° Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ EXPLAIN (По-Π΄ΠΎΠ±Ρ€Π΅ Π΅, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π΄Π° ΠžΠ‘Π―Π‘ΠΠ˜Π’Π• (ΠΠΠΠ›Π˜Π—Π˜Π ΠΠ’Π•, Π‘Π£Π€Π•Π Π˜) ...) ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ» 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 ΠΌΡŠΠ»Ρ‡ΠΈ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΊΠ°Ρ€Π°ΠΌΠ΅ Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈ

А Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚...

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚

Π’ Π½Π΅Π³ΠΎ сС ΠΎΠΏΠΈΡ‚Π°Ρ…ΠΌΠ΅ Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅ΠΌ всички ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ β€žΠΊΠΎΠΉ Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈβ€œ спорСд ΠΏΠ»Π°Π½Π° ΠΈ заявката. Π•, ΠΈ сподСлСтС част ΠΎΡ‚ ΠΎΠΏΠΈΡ‚Π° си с общността.
Π—Π°ΠΏΠΎΠ·Π½Π°ΠΉΡ‚Π΅ сС ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ - обяснСниС.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 ΠΌΡŠΠ»Ρ‡ΠΈ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΊΠ°Ρ€Π°ΠΌΠ΅ Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈ

Подмяна Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² заявка

Ако стС β€žΠΏΡ€ΠΈΠΊΠ°Ρ‡ΠΈΠ»ΠΈβ€œ Π½Π΅ само заявка към ΠΏΠ»Π°Π½Π°, Π½ΠΎ ΠΈ Π½Π΅ΠΉΠ½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΎΡ‚ Ρ€Π΅Π΄Π° DETAIL Π½Π° Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ Π² Π΅Π΄Π½Π° ΠΎΡ‚ ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅:

  • със замСстванС Π½Π° стойността Π² заявката
    Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ изпълнСниС Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€Π°Π½Π΅

    SELECT 'const', 'param'::text;
  • със замСстванС Π½Π° стойност Ρ‡Ρ€Π΅Π· PREPARE/EXECUTE
    Π΄Π° Π΅ΠΌΡƒΠ»ΠΈΡ€Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‡ΠΈΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½Π°Ρ‚Π° част ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½Π° - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π²ΡŠΡ€Ρ…Ρƒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ

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

Архив Π½Π° ΠΏΠ»Π°Π½ΠΎΠ²Π΅

Π—Π°Π»Π΅ΠΏΠ΅Ρ‚Π΅, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅, сподСлСтС с ΠΊΠΎΠ»Π΅Π³ΠΈ! ΠŸΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅ Ρ‰Π΅ останат Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ към тях ΠΏΠΎ-късно: обяснСниС.tensor.ru/Π°Ρ€Ρ…ΠΈΠ²

Но Π°ΠΊΠΎ Π½Π΅ искатС Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π΄Π° Π²ΠΈΠΆΠ΄Π°Ρ‚ вашия ΠΏΠ»Π°Π½, Π½Π΅ забравяйтС Π΄Π° поставитС ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‡Π΅Ρ‚ΠΎ β€žΠ½Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ Π² Π°Ρ€Ρ…ΠΈΠ²β€œ.

Π’ слСдващитС статии Ρ‰Π΅ говоря Π·Π° трудноститС ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ»Π°Π½.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€