ΠΠ°ΠΊ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈΡΠ΅ 10 ΠΏΡΡΠΈ Π±ΡΠΎΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, Π±Π΅Π· Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΏΠΎ-ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π΅Π½ ΡΡΡΠ²ΡΡ ΠΈ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°? Π©Π΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡ
ΠΌΠ΅ ΡΡΡ ΡΠΏΠ°Π΄Π° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π½Π°ΡΠ°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Ρ
ΠΌΠ΅ SQL Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, Π·Π° Π΄Π° ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°ΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΈ Π΄Π° Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°ΠΌΠ΅ ΡΠ΅Π½Π°ΡΠ° Π½Π° ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ.
ΠΡΠ°Π²Ρ ΡΡΠ»ΡΠ³Π° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ Π² ΡΡΡΠΎΠΈΡΠ΅Π»Π½ΠΈ ΡΠΈΡΠΌΠΈ. ΠΠΊΠΎΠ»ΠΎ 3 Ρ
ΠΈΠ»ΡΠ΄ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡΡ Ρ Π½Π°Ρ. ΠΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 10 Ρ
ΠΈΠ»ΡΠ΄ΠΈ Π΄ΡΡΠΈ ΡΠ°Π±ΠΎΡΡΡ Ρ Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΡΠ΅ΠΊΠΈ Π΄Π΅Π½ Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 4-10 ΡΠ°ΡΠ°. Π Π΅ΡΠ°Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π΅, ΡΠ²Π΅Π΄ΠΎΠΌΡΠ²Π°Π½Π΅, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅... ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ PostgreSQL 9.6. ΠΠΌΠ°ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 300 ΡΠ°Π±Π»ΠΈΡΠΈ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ Π²ΡΠ΅ΠΊΠΈ Π΄Π΅Π½ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π΄ΠΎ 200 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Π·Π°ΡΠ²ΠΊΠΈ (10 Ρ
ΠΈΠ»ΡΠ΄ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ). Π‘ΡΠ΅Π΄Π½ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ 3-4 Ρ
ΠΈΠ»ΡΠ΄ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°, Π² Π½Π°ΠΉ-Π°ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΠΈ Π½Π°Π΄ 10 Ρ
ΠΈΠ»ΡΠ΄ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΠ° OLAP. ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΡ, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ OLTP Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π΅ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠ°Π»ΠΊΠΎ. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ
Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΡΠΈΡΠ»Π°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠ°Π±Π° Π½Π° Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΡΠΈΡΡ ΠΎΠΏΠΈΡ Π·Π° Π²Π°Ρ.
Π‘Π½ΠΈΠΌΠΊΠ° Π΅Π΄Π½ΠΎ. Π»ΠΈΡΠΈΡΠ΅Π½
ΠΠΎΠ³Π°ΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π°Ρ
ΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°, Π²ΡΡΡΠ½ΠΎΡΡ Π½Π΅ ΠΌΠΈΡΠ»Π΅Ρ
ΠΌΠ΅ ΠΊΠ°ΠΊΡΠ² Π²ΠΈΠ΄ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΡΠ΅ ΠΏΠ°Π΄Π½Π΅ Π²ΡΡΡ
Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ, Π°ΠΊΠΎ ΡΡΡΠ²ΡΡΡΡ ΡΠΏΡΠ΅ Π΄Π° ΡΠ΅Π³Π»ΠΈ. ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Ρ
ΠΌΠ΅ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΡΠ»Π΅Π΄Π²Π°Ρ
ΠΌΠ΅ ΠΎΠ±ΡΠΈ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈ ΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ
ΠΌΠ΅ Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅Π»ΡΠΌΠ΅ Π² ΠΊΡΠ°ΠΊΠ°, Π½ΠΎ Π½Π°Π΄Ρ
Π²ΡΡΠ»ΠΈΡ
ΠΌΠ΅ ΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠ²Π΅ΡΠΈ ΠΊΠ°ΡΠΎ βΠ½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Π°
Π‘Π½ΠΈΠΌΠΊΠ° Π΄Π²Π΅. Π‘ΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈ
Π’Π°ΠΊΠ° ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 10 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π² Π½Π°ΡΠ°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π½Π° Π΄Π΅Π½. ΠΡ ΡΠ΅Π·ΠΈ 10 Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΈΠΌΠ° ΡΡΠ΄ΠΎΠ²ΠΈΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ 2-3 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΠΏΡΡΠΈ ΡΡΡ ΡΡΠ΅Π΄Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡ 0.1-0.3 ms ΠΈ ΠΈΠΌΠ° Π·Π°ΡΠ²ΠΊΠΈ ΡΡΡ ΡΡΠ΅Π΄Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡ 30 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ 100 ΠΏΡΡΠΈ Π½Π° Π΄Π΅Π½.
ΠΠ΅ Π±Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈΡΠ΅ 10 Ρ ΠΈΠ»ΡΠ΄ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΡΠ΄Π΅ Π΄Π° Π½Π°ΡΠΎΡΠΈΠΌ ΡΡΠΈΠ»ΠΈΡΡΠ° ΡΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. Π‘Π»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΎΡΠ½Π°Ρ ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΡΠΌΠ΅ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅.
Π’ΠΠ Π·Π°ΡΠ²ΠΊΠΈ
Π’ΠΎΠ²Π° ΡΠ° Π½Π°ΠΉ-ΡΠ΅ΠΆΠΊΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΡΠ½Π΅ΠΌΠ°Ρ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ (ΠΎΠ±ΡΠΎ Π²ΡΠ΅ΠΌΠ΅). Π’ΠΎΠ²Π° ΡΠ° Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ»ΠΈ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΎ, ΠΈΠ»ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΡΠΈΠ΅ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠ½Π΅ΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ (Π΄ΡΠ»Π³ΠΈΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π±ΡΡ Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² ΠΏΡΡΠ²ΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ Π½Π° Π±ΠΎΡΠ±Π°ΡΠ° Π·Π° ΡΠΊΠΎΡΠΎΡΡ). Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΡΡΠ²ΡΡΡΡ ΠΈΠ·ΡΠ°Π·Ρ ΠΎΠ΄Π²Π° Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΡΡΡ Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΡ ΡΠΎΠΏ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΏΠΎ ΠΎΠ±ΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° IO. ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΊΠΈΠ²Π° Π·Π°ΡΠ²ΠΊΠΈ ΡΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ.
ΠΠ±ΠΈΡΠ°ΠΉΠ½Π°ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΅ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Π’ΠΠ Π·Π°ΡΠ²ΠΊΠΈ. ΠΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ ΡΡΡ
; ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π΄ΠΎΡΠΈ Π½Π° Π΅Π΄Π½Π° Π·Π°ΡΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈ 5-10% ΠΎΡ ΡΠ΅ΡΡΡΡΠΈΡΠ΅. Π‘ Π½Π°ΠΏΡΠ΅Π΄Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΎΠ±Π°ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π’ΠΠ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΡΠ°Π²Π° Π²ΡΠ΅ ΠΏΠΎ-Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»Π½Π° Π·Π°Π΄Π°ΡΠ°. ΠΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π²Π΅ΡΠ΅ ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ, Π° Π½Π°ΠΉ-βΡΠ΅ΠΆΠΊΠ°ΡΠ°β Π·Π°ΡΠ²ΠΊΠ° ΠΎΡΠ½Π΅ΠΌΠ° βΡΠ°ΠΌΠΎβ 3-5% ΠΎΡ ΡΠ΅ΡΡΡΡΠΈΡΠ΅. ΠΠΊΠΎ Π’ΠΠ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΎΠ±ΡΠΎ ΠΎΡΠ½Π΅ΠΌΠ°Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ 30-40% ΠΎΡ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ, ΡΠΎΠ³Π°Π²Π° Π½Π°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π²Π΅ΡΠ΅ ΡΡΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ ΡΡΠΈΠ»ΠΈΡ Π΄Π° Π³ΠΈ Π½Π°ΠΊΠ°ΡΠ°ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Π±ΡΡΠ·ΠΎ ΠΈ Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π³ΡΡΠΏΠ°.
ΠΡΡΠ°Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° Π²ΡΠΏΡΠΎΡΠ° ΠΊΠΎΠ»ΠΊΠΎ ΡΠΎΠΏ Π·Π°ΡΠ²ΠΊΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΡΠ°Π·ΠΈ Π³ΡΡΠΏΠ°. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²Π·Π΅ΠΌΠ°ΠΌ ΠΏΠΎΠ½Π΅ 10, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 20. ΠΠΏΠΈΡΠ²Π°ΠΌ ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΡΠ²ΠΈΡ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π² Π’ΠΠ Π³ΡΡΠΏΠ°ΡΠ° Π΄Π° ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 10 ΠΏΡΡΠΈ. Π’ΠΎΠ΅ΡΡ, Π°ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠΏΠ°Π΄Π½Π΅ ΡΡΠ·ΠΊΠΎ ΠΎΡ 1-Π²ΠΎ ΠΌΡΡΡΠΎ Π΄ΠΎ 10-ΡΠΎ, ΡΠΎΠ³Π°Π²Π° Π²Π·Π΅ΠΌΠ°ΠΌ Π’ΠΠ-10, Π°ΠΊΠΎ ΡΠΏΠ°Π΄ΡΡ Π΅ ΠΏΠΎ-ΠΏΠ»Π°Π²Π΅Π½, ΡΠΎΠ³Π°Π²Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π³ΡΡΠΏΠ°ΡΠ° Π΄ΠΎ 15 ΠΈΠ»ΠΈ 20.
Π‘ΡΠ΅Π΄Π½ΠΈ ΡΠ΅Π»ΡΠ½ΠΈ
Π’ΠΎΠ²Π° ΡΠ° Π²ΡΠΈΡΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ΄Π²Π°Ρ Π²Π΅Π΄Π½Π°Π³Π° ΡΠ»Π΅Π΄ Π’ΠΠ, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 5-10%. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π² ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΡΠ΅ ΠΊΡΠΈΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°. Π’Π΅Π·ΠΈ ΠΈΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ΠΆΠ°Ρ Π΄ΠΎ 80%. ΠΠΎ Π΄ΠΎΡΠΈ Π°ΠΊΠΎ ΡΠ΅Ρ Π½ΠΈΡΡ Π΄ΡΠ» Π΅ Π½Π°Π΄Ρ Π²ΡΡΠ»ΠΈΠ» 50%, ΡΠΎΠ³Π°Π²Π° Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ.
ΠΠΏΠ°ΡΠΊΠ°
ΠΠ°ΠΊΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ ΠΌΠ΅, ΡΠ΅Π·ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΈΠ΄Π²Π°Ρ Π² ΠΊΡΠ°Ρ ΠΈ ΠΎΡΠ½Π΅ΠΌΠ°Ρ 5-10% ΠΎΡ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π±ΡΠ°Π²ΠΈΡΠ΅ Π·Π° ΡΡΡ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, ΡΠΎΠ³Π°Π²Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈΠΌ ΡΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π΅Π²ΡΠΈΠ½ΠΎ.
ΠΠ°ΠΊ Π΄Π° ΠΎΡΠ΅Π½ΠΈΠΌ Π²ΡΡΠΊΠ° Π³ΡΡΠΏΠ°?
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ SQL Π·Π°ΡΠ²ΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ°ΠΊΠ°Π²Π° ΠΎΡΠ΅Π½ΠΊΠ° Π·Π° PostgreSQL (ΡΠΈΠ³ΡΡΠ΅Π½ ΡΡΠΌ, ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π·Π°ΡΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ Π‘Π£ΠΠ)
SQL Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π³ΡΡΠΏΠΈΡΠ΅ TOP-MEDIUM-TAIL
SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_tail) AS sum_tail
FROM
(
SELECT CASE WHEN rn <= 20 THEN tt_percent ELSE 0 END AS time_top,
CASE WHEN rn > 20 AND rn <= 800 THEN tt_percent ELSE 0 END AS time_medium,
CASE WHEN rn > 800 THEN tt_percent ELSE 0 END AS time_tail
FROM (
SELECT total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query,
ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn
FROM pg_stat_statements
ORDER BY total_time DESC
) AS t
)
AS ts
Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π΅ ΡΡΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, Π²ΡΡΠΊΠ° ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠΎΡΠ΅Π½ΡΠ° Π²ΡΠ΅ΠΌΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ ΡΠ°Π·ΠΈ Π³ΡΡΠΏΠ°. Π Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΈΠΌΠ° Π΄Π²Π΅ ΡΠΈΡΠ»Π° (Π² ΠΌΠΎΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠ° 20 ΠΈ 800), ΠΊΠΎΠΈΡΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΡ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΎΡ Π΅Π΄Π½Π° Π³ΡΡΠΏΠ° ΠΎΡ Π΄ΡΡΠ³Π°.
ΠΡΠΎ ΠΊΠ°ΠΊ Π³ΡΡΠ±ΠΎ ΡΠ΅ ΡΡΠ°Π²Π½ΡΠ²Π°Ρ Π΄ΡΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΊΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π·Π°ΠΏΠΎΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° ΠΈ ΡΠ΅Π³Π°.
ΠΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ° ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ Π΄Π΅Π»ΡΡ Π½Π° Π’ΠΠ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΡΠ·ΠΊΠΎ Π΅ Π½Π°ΠΌΠ°Π»ΡΠ», Π½ΠΎ βΡΡΠ΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅Π»ΡΠ½ΠΈβ ΡΠ° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»ΠΈ.
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π’ΠΠ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ
Π° Π³ΡΡΠ±ΠΈ Π³Π°ΡΠΎΠ²Π΅. Π‘ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π΄Π΅ΡΡΠΊΠΈΡΠ΅ Π±ΠΎΠ»Π΅ΡΡΠΈ ΠΈΠ·ΡΠ΅Π·Π½Π°Ρ
Π°, Π΄Π΅Π»ΡΡ Π½Π° Π’ΠΠ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π°ΠΌΠ°Π»Ρ ΠΈ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ°Ρ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΡΠΈΠ»ΠΈΡ Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΡΠ΄Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ.
ΠΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ΅ΠΊΡΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ°
SELECT * FROM (
SELECT ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn, total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query
FROM pg_stat_statements
ORDER BY total_time DESC
) AS T
WHERE
rn <= 20 -- TOP
-- rn > 20 AND rn <= 800 -- MEDIUM
-- rn > 800 -- TAIL
ΠΡΠΎ ΡΠΏΠΈΡΡΠΊ Ρ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π° Π΄Π° ΡΡΠΊΠΎΡΠΈΠΌ Π’ΠΠ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅:
- Π Π΅Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΡΠ²Π΅Π΄ΠΎΠΌΡΠ²Π°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π±ΡΠΎΠΊΠ΅Ρ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ
- ΠΠΎΠ±Π°Π²ΡΠ½Π΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈ
- ΠΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ORM Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΠΈΡΡ SQL
- ΠΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΌΡΡΠ·Π΅Π»ΠΈΠ²Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ
- ΠΠ΅ΡΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· Π΄Π΅Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡΡΠ·ΠΊΠ° Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΠΎΡΡΠ°Π²ΠΊΠ° -> Π€Π°ΠΊΡΡΡΠ° -> ΠΠ°ΡΠ²ΠΊΠ° -> ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ΅ΡΡ Π²ΡΡΠΊΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π΅ ΡΠ²ΡΡΠ·Π°Π½Π° Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π· Π΄ΡΡΠ³ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ. ΠΠ° Π΄Π° Π½Π΅ ΡΠ²ΡΡΠ·Π²Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Π²ΡΠ² Π²ΡΡΠΊΠ° Π·Π°ΡΠ²ΠΊΠ°, Π½ΠΈΠ΅ Π΄ΡΠ±Π»ΠΈΡΠ°Ρ ΠΌΠ΅ Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΊΡΠΌ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°.
- ΠΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ ΡΡΡ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΡΠΈ ΠΈ ΡΡΠ΄ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠΈ ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ.
ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π²Π½ΡΠ²Π°Ρ Π° Π½Π° Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°Ρ ΡΠ΅Π΄ΠΈΠ·Π°ΠΉΠ½, Π½ΠΎ ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ Π° 5-10% ΠΎΡ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΈ Π±ΡΡ Π° ΠΎΠΏΡΠ°Π²Π΄Π°Π½ΠΈ. Π‘ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π°ΡΡΠΏΡΡ ΡΡ ΡΡΠ°Π²Π°ΡΠ΅ Π²ΡΠ΅ ΠΏΠΎ-ΠΌΠ°Π»ΡΠΊ ΠΈ ΡΠ΅ Π½Π°Π»Π°Π³Π°ΡΠ΅ Π²ΡΠ΅ ΠΏΠΎ-ΡΠ΅ΡΠΈΠΎΠ·Π΅Π½ ΡΠ΅Π΄ΠΈΠ·Π°ΠΉΠ½.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΠ±ΡΡΠ½Π°Ρ ΠΌΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠΎΡΠ°ΡΠ° Π³ΡΡΠΏΠ° ΠΈΡΠΊΠ°Π½ΠΈΡ - Π³ΡΡΠΏΠ°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅Π»ΡΠ½ΠΈ. Π Π½Π΅Π³ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°ΡΠ΅, ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΡΡ Π½Π° ΡΡΠ»Π°ΡΠ° Π³ΡΡΠΏΠ° ΡΠ΅ ΠΎΡΠ½Π΅ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π·Π°ΡΠ²ΠΊΠΈ ΠΎΠ±Π°ΡΠ΅ ΡΠ΅ ΠΎΠΊΠ°Π·Π°Ρ Π° ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π±ΡΡ Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈ Π΄Π΅ΡΠ΅ΡΠΊΠΈ ΠΏΡΡΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ. ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° Π½ΡΠΊΠΎΠΈ ΡΠΈΠΏΠΈΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡ ΠΌΠ΅ ΠΊΡΠΌ Π΄Π΅ΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΈ Π²ΡΡΠΊΠ° Π³ΡΡΠΏΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΡΠ°Π·ΡΠΎΠ²Π°ΡΠΈ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Ρ 3-5%.
- ΠΠΌΠ΅ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° Π·Π°ΠΏΠΈΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° COUNT ΠΈ ΠΏΡΠ»Π½ΠΎ ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°, Π·Π°ΠΏΠΎΡΠ½Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° EXISTS
- ΠΡΡΡΠ²Π°Ρ
ΡΠ΅ ΠΎΡ DISTINCT (Π½ΡΠΌΠ° ΠΎΠ±ΡΠ° ΡΠ΅ΡΠ΅ΠΏΡΠ°, Π½ΠΎ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΡΡΠ²Π΅ΡΠ΅ ΠΎΡ Π½Π΅Π³ΠΎ, ΠΊΠ°ΡΠΎ ΡΡΠΊΠΎΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Ρ 10-100 ΠΏΡΡΠΈ).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΠΎΡ Π³ΠΎΠ»ΡΠΌΠ° ΡΠ°Π±Π»ΠΈΡΠ° Ρ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ (ΠΠΠ‘Π’ΠΠΠΠ)
SELECT DISTINCT P.ID, P.FIRST_NAME, P.LAST_NAME FROM DELIVERY D JOIN PERSON P ON D.DRIVER_ID = P.ID
Π½Π°ΠΏΡΠ°Π²ΠΈ Π·Π°ΡΠ²ΠΊΠ° Π·Π° ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠ°Π»ΠΊΠ° ΡΠ°Π±Π»ΠΈΡΠ° PERSON
SELECT P.ID, P.FIRST_NAME, P.LAST_NAME FROM PERSON WHERE EXISTS(SELECT D.ID FROM DELIVERY WHERE D.DRIVER_ID = P.ID)
ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΡΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ ΠΊΠΎΡΠ΅Π»ΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄Π·Π°ΡΠ²ΠΊΠ°, Π½ΠΎ ΡΡ Π΄Π°Π²Π° ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 10 ΠΏΡΡΠΈ.
- Π ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°ΠΈ COUNT Π±Π΅ΡΠ΅ ΠΈΠ·ΠΎΡΡΠ°Π²Π΅Π½ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΈ
ΡΠ΅ Π·Π°ΠΌΠ΅Π½Ρ Ρ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ - Π²ΠΌΠ΅ΡΡΠΎ
UPPER(s) LIKE JOHN%β
ΡΠΏΠΎΡΡΠ΅Π±Π°
s ILIKE βJohn%β
ΠΡΡΠΊΠ° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° Π·Π°ΡΠ²ΠΊΠ° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅ ΡΡΠΊΠΎΡΡΠ²Π° Ρ 3-1000 ΠΏΡΡΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π½ΠΈ ΡΠ΅ ΡΡΠΎΡΠΈ, ΡΠ΅ Π½ΡΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π·Π°ΡΠ²ΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΎΡΠ½Π΅ΠΌΠ° 10 ms Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π΅ Π΅Π΄Π½Π° ΠΎΡ 3-ΡΠ°ΡΠ° ΡΡΠΎΡΠΈΠ½Π° Π½Π°ΠΉ-ΡΠ΅ΠΆΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΈ Π·Π°Π΅ΠΌΠ° ΡΡΠΎΡΠ½ΠΈ ΠΎΡ ΠΏΡΠΎΡΠ΅Π½ΡΠ° ΠΎΡ ΠΎΠ±ΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. ΠΠΎ ΠΏΡΠΈΠ»Π°Π³Π°ΠΉΠΊΠΈ Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΡΠ΅ΡΠ΅ΠΏΡΠ° ΠΊΡΠΌ Π³ΡΡΠΏΠ° Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ ΡΠΈΠΏ, ΡΠΏΠ΅ΡΠ΅Π»ΠΈΡ ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠ΅Π½ΡΠ°. ΠΠ° Π΄Π° Π½Π΅ Π³ΡΠ±ΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅ Π² ΡΡΡΠ½ΠΎ ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠΎΡΠΈΡΠΈ Π·Π°ΡΠ²ΠΊΠΈ, Π½ΠΈΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΡΠΈ ΡΠΊΡΠΈΠΏΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ Π·Π° Π½Π°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΎΡ ΡΡΡΠΈΡ ΡΠΈΠΏ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ ΡΡΡΡΠ΅Π½Π΅ Π² Π³ΡΡΠΏΠΈ ΠΎΡ Π·Π°ΡΠ²ΠΊΠΈ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΠΌ ΠΎΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° ΡΠΈ ΡΡΡ ΡΠΊΡΠΎΠΌΠ½ΠΈ ΡΡΠΈΠ»ΠΈΡ.
Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠΈΠΌ Π²ΡΡΡ Ρ ΡΡΡΠΈΡ Ρ Π°ΡΠ΄ΡΠ΅Ρ Π²Π΅ΡΠ΅ ΡΡΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Π‘ΡΠ΅Π΄Π½ΠΎΠ΄Π½Π΅Π²Π½ΠΎΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π΅ ΠΎΠΊΠΎΠ»ΠΎ 30%, Π² ΠΏΠΈΠΊΠΎΠ²Π΅ΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π° Π΄ΠΎ 70%. ΠΡΠΎΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π±ΡΠΎΡΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅, ΡΠ΅ Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ» ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ 10 ΠΏΡΡΠΈ. Π Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΈΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π½Π° ΡΡΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈ Π³ΡΡΠΏΠΈ Π’ΠΠ-Π‘Π ΠΠΠΠ Π·Π°ΡΠ²ΠΊΠΈ. ΠΠ΅Π΄Π½Π°Π³Π° ΡΠΎΠΌ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π½ΠΎΠ²Π° Π·Π°ΡΠ²ΠΊΠ° Π² Π’ΠΠ Π³ΡΡΠΏΠ°ΡΠ°, Π½ΠΈΠ΅ Π²Π΅Π΄Π½Π°Π³Π° Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π΄Π° Ρ ΡΡΠΊΠΎΡΠΈΠΌ. ΠΠΈΠ΅ ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Π³ΡΡΠΏΠ°ΡΠ° MEDIUM Π²Π΅Π΄Π½ΡΠΆ ΡΠ΅Π΄ΠΌΠΈΡΠ½ΠΎ, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° Π·Π°ΡΠ²ΠΊΠΈ. ΠΠΊΠΎ ΠΏΠΎΠΏΠ°Π΄Π½Π΅ΠΌ Π½Π° Π½ΠΎΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌΠ΅, Π½ΠΈΠ΅ Π±ΡΡΠ·ΠΎ Π³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΌΠ΅. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π½Π°ΠΌΠΈΡΠ°ΠΌΠ΅ Π½ΠΎΠ²ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΊΡΠΌ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π·Π°ΡΠ²ΠΊΠΈ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
Π‘ΠΏΠΎΡΠ΅Π΄ Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈ ΡΠ΅Π³Π°ΡΠ½ΠΈΡΡ ΡΡΡΠ²ΡΡ ΡΠ΅ ΠΈΠ·Π΄ΡΡΠΆΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π±ΡΠΎΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Ρ ΠΎΡΠ΅ 3-5 ΠΏΡΡΠΈ. ΠΡΡΠ½ΠΎ, ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΡΠ΅ Π΅Π΄Π½ΠΎ Π°ΡΠΎ Π² ΡΡΠΊΠ°Π²Π° ΡΠΈ - Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠΌΠ΅ ΠΏΡΠ΅Ρ
Π²ΡΡΠ»ΠΈΠ»ΠΈ SELECT Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΠΎΠ³Π»Π΅Π΄Π°Π»ΠΎΡΠΎ, ΠΊΠ°ΠΊΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°. ΠΠΎ Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π° ΡΡΠ·Π½Π°ΡΠ΅Π»Π½ΠΎ, Π·Π°ΡΠΎΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ ΠΏΡΡΠ²ΠΎ Π΄Π° ΠΈΠ·ΡΠ΅ΡΠΏΠΈΠΌ Π½Π°ΠΏΡΠ»Π½ΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° βΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠ½Π°ΡΠ°β ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌ βΡΠ΅ΠΆΠΊΠ°ΡΠ° Π°ΡΡΠΈΠ»Π΅ΡΠΈΡβ.
ΠΠ΄ΠΈΠ½ ΠΊΡΠΈΡΠΈΡΠ΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ Π²ΡΡΡ
Ρ ΠΈΠ·Π²ΡΡΡΠ΅Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π΅ΡΡΠΈΠΊΠ°Π»Π½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅. ΠΡΠΏΠ΅ΡΠ΅ ΠΏΠΎ-ΠΌΠΎΡΠ΅Π½ ΡΡΡΠ²ΡΡ, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° Π³ΡΠ±ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈ. Π‘ΡΡΠ²ΡΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΡΡΡΠ²Π° ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ, ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠΌΠ΅ ΠΈΠ·ΡΠ΅ΡΠΏΠ°Π»ΠΈ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° Π²Π΅ΡΡΠΈΠΊΠ°Π»Π½ΠΎΡΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π° ΡΠ°ΠΌΠΎ Π±ΡΠΎΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΠ΅ Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ» 10 ΠΏΡΡΠΈ. Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈ ΠΈ Π²Π΅ΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΠΈΠ΄ΠΎΠ²Π΅ Π·Π°ΡΠ²ΠΊΠΈ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π² ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π·Π°ΡΠ²ΠΊΠΈ ΠΈ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄Π° ΡΠΌΠ½ΠΎΠΆΠΈΡΠ΅ ΠΏΠΎ ΠΎΡΠ΅ 5, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ΅Π°Π»Π½ΠΈΡ ΠΊΠΎΠ΅ΡΠΈΡΠΈΠ΅Π½Ρ Π½Π° ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊΠ° ΡΠ΅, ΡΠΏΠΎΡΠ΅Π΄ Π½Π°ΠΉ-ΠΊΠΎΠ½ΡΠ΅ΡΠ²Π°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΠΎΡΠ΅Π½ΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ Π±ΠΈΠ»ΠΎ 50 ΠΏΡΡΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅. ΠΠ΅ΡΡΠΈΠΊΠ°Π»Π½ΠΎΡΠΎ Π·Π°Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΡΡΡΠ²ΡΡ Π±ΠΈ ΡΡΡΡΠ²Π°Π»ΠΎ 50 ΠΏΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅. ΠΡΠΎΠ±Π΅Π½ΠΎ ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ Π²Π΅Π΄Π½ΡΠΆ Π½Π°ΠΏΡΠ°Π²Π΅Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠ΅Π· ΡΡΠ»ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅, Π° ΡΠΌΠ΅ΡΠΊΠ°ΡΠ° Π·Π° Π½Π°Π΅ΡΠΈΡ ΡΡΡΠ²ΡΡ ΠΈΠ΄Π²Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠ΅ΡΠ΅Ρ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com