ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ
ΠΠ½Π΄Π΅ΠΊΡΡ Π² PostgreSQL
ΠΠ²ΡΠΎΡΠΈΠ·ΡΠΉΡΠ΅ΡΡ
ΠΠ½Π΄Π΅ΠΊΡΡ Π² PostgreSQL
Full Stack Developer Π² DataArt
Π ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²Π°Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±Π°Π· Π΄Π°Π½Π½ΡΡ β ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ². ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π‘Π£ΠΠ PostgreSQL ΠΊΠΎΡΠΎΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Π·Π°Π΄Π°Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΠΏΠΎΠ΄Π΅Π»ΡΡΡ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π½Π° ΡΡΠ°ΡΡΠΈ Ρ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² PostgreSQL.
Π‘ΡΠ°ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΡΡΠ΄Π΅Π½ΡΠ°ΠΌ, ΠΈΠΌΠ΅ΡΡΠΈΠΌ ΠΎΠ±ΡΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ , ΠΈ ΠΎΠΏΡΡΠ½ΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ, Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π²ΡΠΈΠΌΡΡ ΡΠ°Π½ΡΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ ΠΈ ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ.
ΠΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²
ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΊΡΠΈΡΠ΅ΡΠΈΡ, β ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ. ΠΠΎ Ρ ΡΠΎΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΏΠ°Π΄Π°ΡΡ. ΠΠ»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ β ΠΈΠ½Π΄Π΅ΠΊΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π½ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠΎΡΠΌΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ Π½Π°ΠΌ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ° Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΡΠΊΠΎΠΌΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ.
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΠ½ΠΈΠ³ΠΎΠΉ, ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π½Π°Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠ°ΠΊΠΈΡ Β«ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²Β», Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π³Π»Π°Π²Ρ ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ Π»ΠΈΡΡΠ°ΡΡ ΠΈ ΡΠΈΡΠ°ΡΡ Π²ΡΡ ΠΊΠ½ΠΈΠ³Ρ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ ΡΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ. ΠΠΌΠ΅Ρ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΌΠ΅Π½ΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΡ ΡΠΎΡΠ½ΠΎ ΡΠ·Π½Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΠΊΠ½ΠΈΠ³ΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΠΈΡΠ΅ΠΌ. ΠΠ½Π΄Π΅ΠΊΡΡ Π² Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΡΡΠΈ ΡΡΡΡΠΎΠ΅Π½Ρ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΊΠ½ΠΈΠ³ΠΈ.
ΠΠ°ΠΆΠ½ΠΎ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π² Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, Π½ΠΎ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π½Π° ΠΏΠΎΠΈΡΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΠΏΡΠΈ ΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°Π΄Π°ΡΡ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠΈΡΠ΅Π». ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ°, Π² Ρ ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° β O(n). ΠΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Ρ ΡΠ°Π½ΠΈΡΡ Π½Π°ΡΠΈ ΡΠΈΡΠ»Π° ΠΎΡΠΎΠ±ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ β ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎ ΡΠ±ΡΠ²Π°Π½ΠΈΡ β ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°.
2 4 5 10 23 34 38 58 112 114 115 110 123 134 138 158 180
ΠΠΎΠΏΡΡΡΠΈΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΡΡΠΎΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΡΠ»ΠΎ 158. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ:
Π ΠΈΡΠΎΠ³Π΅ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π°Π» Π½Π°ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ΅Π³ΠΎ Π·Π° ΡΡΠΈ ΡΠ°Π³Π°. ΠΡΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ΅ Ρ Π½Π°ΡΠ°Π»Π° ΡΠΏΠΈΡΠΊΠ° Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π±Ρ 16 ΡΠ°Π³ΠΎΠ². ΠΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΈΠΌΠ΅Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ O(log(n)). ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΡΠΌΡΠ»Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ O(n) ΠΈ O(log(n)), ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠ΅Π½ΠΈΡΡ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ Ρ ΡΠΎΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ :
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ΅Ρ. Π₯ΡΠ°Π½Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΌΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ½ΠΈΠ·ΠΈΠ»ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ Π½ΠΈΠΌ, Π½ΠΎ ΠΈ ΠΊΠΎΠ»ΠΎΡΡΠ°Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΠ»ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΈ ΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ .
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Π΄Π°Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ (ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ B-Π΄Π΅ΡΠ΅Π²Π°) ΠΎΡΠ½ΠΎΠ²Π°Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠΌ Π½Π°ΠΌΠΈ Π²ΡΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
ΠΠ½Π΄Π΅ΠΊΡΡ Π² PostgreSQL
Π Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ PostgreSQL, ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΡΡΠΎΠΊΠΈ ΡΡΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ.
SELECT * FROM table_name WHERE P(column_name) = 1
ΠΡΠ΅Π΄ΠΈΠΊΠ°Ρ P ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π½Π΅ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π° Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ . Π’Π°ΠΊΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠΌΠΈ.
ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ°, ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌ, Π² PostgreSQL Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π»Ρ ΡΡΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈΠ½Π΄Π΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ CREATE INDEX :
ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΈ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΠΌΡΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ UNIQUE :
ΠΠ»ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ»Ρ ΡΠ°Π±Π»ΠΈΡΡ, Π° ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΡ (ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ ΠΏΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ). ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΡΠΊΠΎΡΠΈΡ Π·Π°ΠΏΡΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌΡ ΠΏΠΎΠ»Ρ:
CREATE INDEX index_name ON table_name(lower(text_field))
Π ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
CREATE INDEX index_name ON table_name USING GIST (column_name)
B-tree
ΠΡΠΎΡ ΡΠΈΠΏ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ ΠΏΠΎΠΊΡΡΠ²Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ ΠΊΡΡΠ³ Π·Π°Π΄Π°Ρ (Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΌΠΎΠ³ΡΡ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ B-Π΄Π΅ΡΠ΅Π²ΡΠ΅Π²).
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ B-Π΄Π΅ΡΠ΅Π²Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ, Ρ. Π΅. Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅/ΠΌΠ΅Π½ΡΡΠ΅/ΡΠ°Π²Π½ΠΎ. Π‘ΡΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ ΡΠΈΡΠ»Π°, ΡΡΡΠΎΠΊΠΈ, Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΡ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ ΠΈ Π»ΡΠ±ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΊΠΎΡΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ B-Π΄Π΅ΡΠ΅Π²Π°? ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΡΠ±ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ, ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠΎΡΡΠΎΡΡΠΈΠΌ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ°Π²Π΅Π½ΡΡΠ²Π°/ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ B-Π΄Π΅ΡΠ΅Π²Π°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ B-Π΄Π΅ΡΠ΅Π²Π° ΡΡΠΊΠΎΡΡΠ΅Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², Π΅ΡΠ»ΠΈ Π² ORDER BY ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅.
ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ B-Π΄Π΅ΡΠ΅Π²Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠΌ Π½Π°ΠΌΠΈ ΡΠ°Π½Π΅Π΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°: Ρ. ΠΊ. Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π±ΡΡΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡ, ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ½ΠΈΠΆΠ°Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ.
ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΡΠΎΡΡΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Ρ. ΠΊ. Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡΡΡ: Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ, Π·Π°ΠΏΠΈΡΠΈ β ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ. Π§ΡΠΎΠ±Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΈΠ½Π΄Π΅ΠΊΡ Ρ ΡΠ°Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ Π²Π΅ΡΠ²ΡΡΠ΅Π³ΠΎΡΡ Π΄Π΅ΡΠ΅Π²Π°, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ B-Π΄Π΅ΡΠ΅Π²ΠΎΠΌ (B-tree).
ΠΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠ·Π΅Π» B-Π΄Π΅ΡΠ΅Π²Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ°, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, t ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π’ΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎ t+1 Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΡΠΌ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠ°Π²ΠΈΠ»Ρ:
ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠΎΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ B-Π΄Π΅ΡΠ΅Π²ΠΎΠΌ, ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΡΡΡΠΎΠΈΡΡΡ Π΄Π°Π»Π΅Π΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΏΠΎ ΡΠ°ΠΊΠΎΠΌΡ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ.
ΠΠ° ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ·Π»Π΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ, ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π±ΡΡΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΈ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΡ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΈΡΠ»ΠΎ 67:
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π² B-Π΄Π΅ΡΠ΅Π²Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ h ΡΠ°Π· Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΠΏΠΈΡΠΊΠ°Ρ , Π³Π΄Π΅ h β ΡΡΠΎ Π²ΡΡΠΎΡΠ° Π΄Π΅ΡΠ΅Π²Π°. Π’.ΠΊ. B-Π΄Π΅ΡΠ΅Π²ΠΎ β ΡΠΈΠ»ΡΠ½ΠΎ-Π²Π΅ΡΠ²ΡΡΠ΅Π΅ΡΡ ΠΈ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ (Ρ. Π΅. ΠΏΡΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΡΠΎΡ ΡΠ°Π½ΡΡΡΠΈΠ΅ Π΅Π³ΠΎ Π²ΡΡΠΎΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ, ΡΠΌ. ΡΡΠ°ΡΡΡ), ΡΠΈΡΠ»ΠΎ h ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅Π²Π΅Π»ΠΈΠΊΠΎ, ΠΈ ΠΏΡΠΈ ΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ½ΠΎ ΡΠ°ΡΡΠ΅Ρ Π»ΠΎΠ³Π°ΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ°Π½Π΅Π΅, ΡΡΠΎ ΠΏΡΠΈΠ½ΠΎΡΠΈΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ B-Π΄Π΅ΡΠ΅Π²Π° ΠΏΡΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π² Π‘Π£ΠΠ β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» B-Π΄Π΅ΡΠ΅Π²Π° ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΄ΠΈΡΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΡΠ°Π½ Π·Π° ΠΎΠ΄Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. B-Π΄Π΅ΡΠ΅Π²ΠΎ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π‘Π£ΠΠ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅ΡΠΆΠ°ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ·Π»Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ (ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅), ΡΠΈΡΠ°Ρ ΡΠ·Π»Ρ Π½ΠΈΠΆΠ½ΠΈΡ ΡΡΠΎΠ²Π½Π΅ΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΠ½Π΄Π΅ΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ B-Π΄Π΅ΡΠ΅Π²Π° ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΊΠΎΡΡΡΡ Π·Π°ΠΏΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π΅ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠ»Ρ, Π° Π»ΡΠ±ΡΡ ΡΠ°ΡΡΡ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π½Π°ΡΠ°Π»Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡ LIKE Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ:
SELECT * FROM table_name WHERE text_field LIKE ‘start_substring%’
ΠΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΊΠΎΡΡΡΡ Π·Π°ΠΏΡΠΎΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΠ³ΡΡΠΈΡΡΡΡ ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. ΠΠΎΡΡΠΎΠΌΡ Π²Π°ΠΆΠ΅Π½ ΠΏΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌ col_1 ΠΈ col_2. Π’ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° Π²ΠΈΠ΄Π°:
SELECT * FROM table_name WHERE col_1 = 123
Π Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ col_1. ΠΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ (col_1, col_2).
ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ col_2 ΡΠ°ΠΊΠΎΠΉ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅, ΠΊΠ°ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ B-Π΄Π΅ΡΠ΅Π²Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² PostgreSQL, ΡΠΌ. ΡΡΠ°ΡΡΡ.
GiST ΠΈ SP-GiST
GiST β ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Β«generalized search treeΒ». ΠΡΠΎ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ ΡΠ°Π½Π΅Π΅ b-tree. ΠΠΎ b-tree ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΡΠ΅ΠΌ ΡΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½ΡΡ , Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΡ. ΠΠΎ PostgreSQL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΅ΠΎΠ΄Π°Π½Π½ΡΠ΅ ΠΈ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
Π’ΡΡ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ GiST. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΏΠΎ ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ Π΄Π΅ΡΠ΅Π²Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ Π΄Π΅ΡΠ΅Π²ΠΎ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠ°ΠΌΡΠΌ ΡΠ°Π·Π½ΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ. ΠΡΠ»ΠΈ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ B-Π΄Π΅ΡΠ΅Π²Π° ΠΌΡ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ Π΄Π΅Π»ΠΈΠΌ Π΅Π³ΠΎ Π½Π° ΡΠ°ΡΡΠΈ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π±ΠΎΠ»ΡΡΠ΅-ΠΌΠ΅Π½ΡΡΠ΅, ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ GiST ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² GiST-ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡΡ R-Π΄Π΅ΡΠ΅Π²ΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ»Π΅Π²Π°, ΡΠΏΡΠ°Π²Π°; ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈ Ρ. Π΄.). Π’Π°ΠΊΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² PostgreSQL ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π³Π΅ΠΎΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΡ Π²ΠΈΠ΄Π° Β«ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π° ΠΊΠ°ΡΡΠ΅, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ ΠΎΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π½Π° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 1 ΠΊΠΌΒ».
SP-GiST ΠΏΠΎΡ ΠΎΠΆ GiST, Π½ΠΎ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ. Π’Π°ΠΊΠΈΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ ΠΏΡΠΈ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π½Π° Π½Π΅ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΡΠΊΠ²Ρ SP ΠΎΠ·Π½Π°ΡΠ°ΡΡ space partitioning. Π ΡΠ°ΠΊΠΎΠΌΡ ΡΠΈΠΏΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ kd-Π΄Π΅ΡΠ΅Π²ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² PostgreSQL. ΠΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈ R-Π΄Π΅ΡΠ΅Π²ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Π½Π΅ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈ Π²ΡΡΠ°Π²ΠΊΠ΅ ΠΈ ΠΏΠΎΠΈΡΠΊΠ΅. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠ΅ΡΡ Π΄Π΅ΡΠ΅Π²ΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ»Π°Π±ΠΎ Π²Π΅ΡΠ²ΠΈΡΡΡ, ΡΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, GiST ΠΈ SP-GiST ΠΌΠΎΠ³ΡΡ ΡΠ»ΡΠΆΠΈΡΡ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΡΠΌ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ, ΠΎΠ±Π»Π΅Π³ΡΠ°ΡΡΠΈΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PostgreSQL ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π½Π΅Π³ΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΡΡ Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² Π΄Π»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ Π½ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ , Π»Π΅ΠΆΠ°ΡΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π΅ R- ΠΈ kd-Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΡΠΌ. ΡΠ°Π· ΠΈ Π΄Π²Π°, Π° ΠΎΠ± ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π² PostgreSQL ΡΠΌ. Π² ΡΡΠΎΠΉ ΠΈ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ½Π΄Π΅ΠΊΡΡ β Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , ΡΡΠΊΠΎΡΡΡΡΠΈΠΉ ΠΏΠΎΠΈΡΠΊ. ΠΠ½ Π½Π΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ΅Π½, ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π±Π΅Π· Π»ΠΈΡΠ½Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π΅ ΡΡΠΎΠΈΡ β ΠΈΠ½Π΄Π΅ΠΊΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ, ΠΈ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π‘Π£ΠΠ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
PostgreSQL ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π·Π°Π΄Π°Ρ:
ΠΡΠ½ΠΎΠ²Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Microsoft SQL Server
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Microsoft SQL Server ΠΊΠ°ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π±ΡΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΠΈΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ?
ΠΠ½Π΄Π΅ΠΊΡ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠΎΡΡΠΎΡΡΡΡ ΠΈΠ· ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΌΠ΅ΡΡΠΎΠΌ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠ½Π΄Π΅ΠΊΡΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π±ΡΡΡΡΡΠΉ ΠΏΠΎΠΈΡΠΊ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ½Π΄Π΅ΠΊΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΈ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΡΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ, Π³Π°ΡΠ°Π½ΡΠΈΡΡΡ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ .
Π’ΠΈΠΏΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Microsoft SQL Server
Π Microsoft SQL Server ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠΏΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²:
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Microsoft SQL Server
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΈΡΡΡΠΏΠ°ΡΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Ρ ΠΎΡΠΎΡΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»ΠΎΡ ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π° Π½Π°ΠΎΠ±ΠΎΡΠΎΡ ΡΠ½ΠΈΠ·ΠΈΡΡ Π΅Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ INSERT, UPDATE, DELETE ΠΈ MERGE, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π²ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠ±ΡΠΈΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΌΡ Ρ ΠΠ°ΠΌΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅, Π° ΡΠ΅ΠΉΡΠ°Ρ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ².
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅! Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ SQL ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ ΠΌΠ΅Π½Ρ Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π²Π΅ΡΡΠΈΡ Microsoft SQL Server 2016 Express.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Microsoft SQL Server ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π°: ΠΏΠ΅ΡΠ²ΡΠΉ β ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΡΠ΅Π΄Ρ SQL Server Management Studio (SSMS), ΠΈ Π²ΡΠΎΡΠΎΠΉ β ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ·ΡΠΊΠ° Transact-SQL, ΠΌΡ Ρ ΠΠ°ΠΌΠΈ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΎΠ±Π° ΡΠΏΠΎΡΠΎΠ±Π°.
ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΡΠΎΠ²Π°ΡΠ°ΠΌΠΈ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ TestTable, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΅ΡΡΡ ΡΡΠΈ ΡΡΠΎΠ»Π±ΡΠ°:
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ», ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° (PRIMARY KEY), Π½ΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Ρ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ, Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°. Π‘Π½Π°ΡΠ°Π»Π° ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Management Studio.
ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ SSMS ΠΈ Π² ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ Π½ΡΠΆΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΡΠ΅Π»ΠΊΠ°Π΅ΠΌ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ ΠΏΡΠ½ΠΊΡΡ Β«ΠΠ½Π΄Π΅ΠΊΡΡΒ», Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Β«Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΒ» ΠΈ ΡΠΈΠΏ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Β«ΠΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉΒ».
ΠΡΠΊΡΠΎΠ΅ΡΡΡ ΡΠΎΡΠΌΠ° Β«ΠΠΎΠ²ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΒ», Π³Π΄Π΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° (ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΠ°Π±Π»ΠΈΡΡ), ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΡΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ, Π΅ΡΠ»ΠΈ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ΅ ΡΠΎΠ²Π°ΡΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΎΠ²Π°ΡΠΎΠ², ΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ. ΠΠΎΡΠΎΠΌ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΡΠΎΠ»Π±Π΅Ρ (ΠΊΠ»ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°), Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ, Ρ.Π΅. Π±ΡΠ΄ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΡΡΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«ΠΠΎΠ±Π°Π²ΠΈΡΡΒ».
ΠΠΎΡΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π²ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΆΠΌΠ΅ΠΌ Β«ΠΠΒ», Π² ΠΈΡΠΎΠ³Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ.
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ T-SQL CREATRE INDEX, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ ΡΠ°ΠΊ
ΠΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ
Π‘Π΅ΠΉΡΠ°Ρ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΡ ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΡΠΎΠ»Π±ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌΠΈ, Π½ΠΎ Π±ΡΠ΄ΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡ. ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠΊΡΡΠ²Π°Π» Π·Π°ΠΏΡΠΎΡ, Ρ.Π΅. ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» Π²ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ (ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«ΠΠΎΠΊΡΡΡΠΈΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡΠ°Β»). ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΠΊΡΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΏΠΎΠ²ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ΅, ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΡΠ°Π±Π»ΠΈΡ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΌΠ΅Π½ΡΡΠ΅ΠΌΡ ΡΠΈΡΠ»Ρ Π΄ΠΈΡΠΊΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π΅ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π²Π»Π΅ΡΠ΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Ρ.Π΅. Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠ΅ΡΡΠ° Π½Π° Π΄ΠΈΡΠΊΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π»Π΅ΡΡ ΠΈ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ INSERT, UPDATE, DELETE ΠΈ MERGE Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅.
ΠΠΎΡΠ»Π΅ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠΎΡΠΌΡ Β«ΠΠΎΠ²ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΒ» ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΡΡΠΎΠ»Π±Π΅Ρ ΠΈΠ»ΠΈ ΡΡΠΎΠ»Π±ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«ΠΠΎΠ±Π°Π²ΠΈΡΡΒ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΊΠ°ΠΆΠ΅ΠΌ CategoryID.
ΠΠ°Π»Π΅Π΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ Β«ΠΠΊΠ»ΡΡΠ΅Π½ΠΎ ΡΡΠΎΠ»Π±ΡΡΒ» ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«ΠΠΎΠ±Π°Π²ΠΈΡΡΒ» Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠΎΠ»Π±ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡ, Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ProductName.
ΠΠ° Transact-SQL ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² Microsoft SQL Server
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π»ΠΊΠ½ΡΡΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΏΠΎ Π½ΡΠΆΠ½ΠΎΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΈ Π½Π°ΠΆΠ°ΡΡ Β«Π£Π΄Π°Π»ΠΈΡΡΒ», Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ ΡΠ²ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π°ΠΆΠ°Π² Β«ΠΠΒ».
ΠΈΠ»ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ DROP INDEX, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ DROP INDEX Π½Π΅ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΏΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ PRIMARY KEY ΠΈ UNIQUE. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ALTER TABLE Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ DROP CONSTRAINT.
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Microsoft SQL Server
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ°Ρ SQL ΡΠ΅ΡΠ²Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π½ΠΎΡΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π½ΠΎ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π²ΡΠ΅ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ΅, Ρ.Π΅. ΠΎΠ½ΠΈ ΠΎΠΊΠ°ΠΆΡΡΡΡ ΡΠ°Π·Π±ΡΠΎΡΠ°Π½Π½ΡΠΌΠΈ ΠΏΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π²Π»Π΅ΡΠ΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΊ ΡΠ°ΠΊΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ².
Π ΠΊΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, Π° Π² ΠΊΠ°ΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΠ΅?
Π§ΡΠΎΠ±Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΡΠ½Π°ΡΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠΎΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π΅ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅ΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅ΠΉ. ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ sys.dm_db_index_physical_stats, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅ ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ, ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Ρ Π²ΡΠ΅Ρ ΡΠ°Π±Π»ΠΈΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΡΡΠΎΠ»Π±Π΅Ρ avg_fragmentation_in_percent, Ρ.Π΅. ΠΏΡΠΎΡΠ΅Π½ΡΠ½Π°Ρ Π΄ΠΎΠ»Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
Π’Π°ΠΊ Π²ΠΎΡ, Microsoft ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ:
ΠΠΈΡΠ½ΠΎ Ρ ΠΌΠΎΠ³Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅, Π΅ΡΠ»ΠΈ Ρ ΠΠ°Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠ΄Π°ΡΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ 24 ΡΠ°ΡΠ° Π² ΡΡΡΠΊΠΈ, Ρ.Π΅. ΠΎΠ½Π° Π½Π΅ ΡΡΠΏΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ ΠΠ, ΡΠΎ ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΌΠ΅Π»ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
Π Π΅ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²
Π Π΅ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° β ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π΄Π΅ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈ Π½Π΅ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ, ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ (ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ) ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠ·Π»ΠΎΠ².
ΠΠ»Ρ ΡΠ΅ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ SSMS, ΡΠ°ΠΊ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Transact-SQL.
Π Π΅ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Management Studio
Π Π΅ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Transact-SQL
ΠΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²
ΠΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° β ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΡΡΡΠ°Π½ΡΠ΅ΡΡΡ.
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π°.
ΠΠ΅ΡΠ²ΡΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ALTER INDEX Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ REBUILD. ΠΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ DBCC DBREINDEX. ΠΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ±.
Π Π²ΡΠΎΡΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ CREATE INDEX Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ DROP_EXISTING. ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, Ρ.Π΅. Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΡΠΎΠ»Π±ΡΠΎΠ².
Π Management Studio ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½. ΠΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΏΠΎ Π½ΡΠΆΠ½ΠΎΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ Β«ΠΠ΅ΡΠ΅ΡΡΡΠΎΠΈΡΡΒ».
ΠΠ° ΡΡΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π°ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² Microsoft SQL Server Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½, Π΅ΡΠ»ΠΈ ΠΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ SQL ΠΈ T-SQL, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΌΠΎΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΡΡΡΡ ΠΏΠΎ T-SQL, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΡ Β«Ρ Π½ΡΠ»ΡΒ» Π½Π°ΡΡΠΈΡΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ SQL ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ·ΡΠΊΠ° T-SQL Π² Microsoft SQL Server, ΡΠ΄Π°ΡΠΈ!
ΠΠ½Π΄Π΅ΠΊΡΡ Π² PostgreSQL β 1
Π ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ ΡΡΠ°ΡΠ΅ΠΉ ΡΠ΅ΡΡ ΠΏΠΎΠΉΠ΄Π΅Ρ ΠΎΠ± ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ Π² PostgreSQL.
ΠΡΠ±ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Ρ ΡΠ°Π·Π½ΡΡ ΡΠΎΡΠ΅ΠΊ Π·ΡΠ΅Π½ΠΈΡ. ΠΡ Π±ΡΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ Π‘Π£ΠΠ: ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π² PostgreSQL ΠΈΡ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π½ΡΡ , ΠΈ ΠΊΠ°ΠΊ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠΎΠΆΠ°Π»ΡΠΉ, ΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ°ΡΠΊΡΡΡΡ ΠΈ ΠΌΠ΅Π½ΡΡΠΈΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΡΠ»ΠΎΠ², Π½ΠΎ ΠΌΡ Π²ΡΠ°ΠΉΠ½Π΅ Π½Π°Π΄Π΅Π΅ΠΌΡΡ Π½Π° Π»ΡΠ±ΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠ»ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊ ΡΡΠΆΠΎΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, Π½ΠΎ ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ.
ΠΠ° ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΡΡΠ°Π½ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΎΠ²ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ². ΠΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π½Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠ° Π‘ΠΈ ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΡΠΊΠΎΡΠ΅Π΅ ΠΊ ΠΊΠΎΠΌΠΏΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°, Π° Π½Π΅ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠΎ ΡΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΌΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, Π° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΡ ΠΊ ΡΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ².
Π ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Ρ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠΈΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΌΡΡ ΠΊ ΡΠ΄ΡΡ Π‘Π£ΠΠ, ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π² PostgreSQL ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π²Π°ΠΆΠ½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ, ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΡ ΠΈ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ². ΠΠΎΡΠ»Π΅ ΡΠ°ΠΊΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²: Hash, B-tree, GiST, SP-GiST, GIN ΠΈ RUM, BRIN ΠΈ Bloom.
ΠΠ·ΠΎΠ»ΡΡΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΡΡΡ:
ΠΠ½Π΄Π΅ΠΊΡΡ
ΠΠ½Π΄Π΅ΠΊΡΡ Π² PostgreSQL β ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ. ΠΡΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ: Π»ΡΠ±ΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅. ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ»ΡΡΠ°ΡΡ, ΡΡΠΎ Π‘Π£ΠΠ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Π±Π΅Π· ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ, Π²Π΅Π΄Ρ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΠ»ΡΠΆΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π² PostgreSQL 9.6 Π²ΡΡΡΠΎΠ΅Π½Ρ ΡΠ΅ΡΡΡ ΡΠ°Π·Π½ΡΡ Π²ΠΈΠ΄ΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΠΈ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ β ΡΡΠΎ ΡΡΠ°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π²Π°ΠΆΠ½ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌ Π² Π²Π΅ΡΡΠΈΠΈ 9.6. Π’Π°ΠΊ ΡΡΠΎ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠΎΠΈΡ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ².
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π²ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² (Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°), Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΡΡΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ»Π±ΡΠ°) ΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΎΡ ΠΊΠ»ΡΡ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ. Π‘ΡΡΠΎΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ TID (tuple id), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½ΠΎΠΌΠ΅ΡΠ° Π±Π»ΠΎΠΊΠ° ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΡΡΠΎΠΊΠΈ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ°. Π’ΠΎΠ³Π΄Π°, Π·Π½Π°Ρ ΠΊΠ»ΡΡ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½Π΅ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠ°Ρ Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π²ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ.
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ, ΡΡΠΊΠΎΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ, Π²Π·Π°ΠΌΠ΅Π½ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°ΡΡΠ°Ρ Π½Π° ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅. ΠΡΠΈ Π»ΡΠ±ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ β Π±ΡΠ΄Ρ ΡΠΎ Π²ΡΡΠ°Π²ΠΊΠ°, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ, β ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½Ρ, ΠΏΡΠΈΡΠ΅ΠΌ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²; ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ HOT (Heap-Only Tuples).
Π Π°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ Π²Π»Π΅ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ. Π§ΡΠΎΠ±Ρ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π»Π΅Π³ΠΊΠΎ Π²ΡΡΡΠΎΠΈΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΡ, Π² PostgreSQL Π²ΡΠ΄Π΅Π»Π΅Π½ ΠΎΠ±ΡΠΈΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ³ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ TID ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π½ΠΈΠΌΠΈ:
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π΄ΠΎΡΡΡΠΏΠ° Π½ΡΠΆΠ½Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΡ. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π°Π΄ΠΎ ΡΠ΅ΡΠΈΡΡ: ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°Π΄ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ? ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ Π΄Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ?
ΠΡΠ°ΠΊ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎ ΡΠ΅Π±Π΅ Π²ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠΎ Π²Π΅ΡΡΠΈΠΈ 9.6 Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΠ° pg_am, Π° Π½Π°ΡΠΈΠ½Π°Ρ Ρ 9.6 Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠΎΡΠ΅Π²Π°Π»ΠΈ Π³Π»ΡΠ±ΠΆΠ΅, Π²Π½ΡΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Π‘ ΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅.
Π Π·Π°Π΄Π°ΡΠΈ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ° Π²Ρ ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅:
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ PostgreSQL ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΌΡΠΌΠΈ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°, ΡΡΠΈΡΡΠ²Π°Ρ ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ TID, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
postgres=# create table t(a integer, b text, c boolean);
CREATE TABLE
postgres=# insert into t(a,b,c)
select s.id, chr((32+random()*94)::integer), random()
ΠΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ°Π±Π»ΠΈΡΡ Ρ ΡΡΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΠΌΠΈ. ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΡΠ»Π° ΠΎΡ 1 Π΄ΠΎ 100000, ΠΈ ΠΏΠΎ Π½Π΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ ΠΈΠ½Π΄Π΅ΠΊΡ (ΠΏΠΎΠΊΠ° Π½Π°ΠΌ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ). ΠΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ASCII-ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΊΡΠΎΠΌΠ΅ Π½Π΅ΠΏΠ΅ΡΠ°ΡΠ½ΡΡ
. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠ΅ΡΡΠ΅ ΠΏΠΎΠ»Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΡΠΈΠ½Π½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π΄Π»Ρ 1% ΡΡΡΠΎΠΊ, ΠΈ Π»ΠΎΠΆΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
. Π‘ΡΡΠΎΠΊΠΈ Π²ΡΡΠ°Π²Π»Π΅Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΡ Π² ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π²ΡΠ±ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Β«a = 1Β». ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ Β«ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅-ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅Β», Π³Π΄Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Β«ΡΠ°Π²Π½ΠΎΒ», Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (ΠΊΠ»ΡΡΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ°) ΡΠ²Π»ΡΠ΅ΡΡΡ Β«1Β». Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄, ΡΡΠΎΠ±Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.
postgres=# explain (costs off) select * from t where a = 1;
QUERY PLAN
——————————-
Index Scan using t_a_idx on t
Index Cond: (a = 1)
(2 rows)
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΠΏΡΠΈΠ½ΡΠ» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Index Scan). ΠΡΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ TID ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠ°ΡΡΡ. ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ ΡΠ°Π±Π»ΠΈΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ TID, ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²Π΅ΡΡΠΈΡ ΡΡΡΠΎΠΊΠΈ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π΅Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΡΡΠΈ, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π±ΠΈΡΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠ΅
ΠΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ Π²ΡΠ΅Π³ΠΎ ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ . ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ Π²ΡΠ±ΠΎΡΠΊΠΈ Π²ΠΎΠ·ΡΠ°ΡΡΠ°ΡΡ ΡΠ°Π½ΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·. ΠΠΎΡΡΠΎΠΌΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π° ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π±ΠΈΡΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠ΅ (bitmap scan):
postgres=# explain (costs off) select * from t where a Bitmap Index Scan on t_a_idx
Index Cond: (a
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ TID, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ (ΡΠ·Π΅Π» Bitmap Index Scan), ΠΈ ΠΏΠΎ Π½ΠΈΠΌ ΡΡΡΠΎΠΈΡΡΡ Π±ΠΈΡΠΎΠ²Π°Ρ ΠΊΠ°ΡΡΠ° Π²Π΅ΡΡΠΈΠΉ ΡΡΡΠΎΠΊ. ΠΠ°ΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΠΎΠΊ ΡΠΈΡΠ°ΡΡΡΡ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ (Bitmap Heap Scan) β ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠΈΡΠ°Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π° Π²ΡΠΎΡΠΎΠΌ ΡΠ°Π³Π΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ (Recheck Cond). ΠΡΠ±ΠΎΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠ°, ΡΡΠΎΠ±Ρ Π±ΠΈΡΠΎΠ²Π°Ρ ΠΊΠ°ΡΡΠ° Π²Π΅ΡΡΠΈΠΉ ΡΡΡΠΎΠΊ ΠΌΠΎΠ³Π»Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ work_mem). Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠΎΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π±ΠΈΡΠΎΠ²Π°Ρ ΠΊΠ°ΡΡΠ° ΡΡΡΠ°Π½ΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΡΠΎΠΊΠΈ. Π’Π°ΠΊΠ°Ρ Β«Π³ΡΡΠ±Π°ΡΒ» ΠΊΠ°ΡΡΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠ΅ΡΡΠ°, Π½ΠΎ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ ΡΠ°Π½ΡΡΠ΅ΠΉΡΡ ΡΠ°ΠΌ ΡΡΡΠΎΠΊΠΈ. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π²ΡΠ±ΠΎΡΠΊΠΈ (ΠΊΠ°ΠΊ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅) ΡΠ°Π³ Β«Recheck CondΒ» Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΏΠ»Π°Π½Π΅, Ρ ΠΎΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
ΠΡΠ»ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π°Π»ΠΎΠΆΠ΅Π½Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ, ΠΈ ΡΡΠΈ ΠΏΠΎΠ»Ρ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Ρ, ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΡΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ (Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΡΠΎΡΡΠ΅Ρ ΡΡΠΎ Π²ΡΠ³ΠΎΠ΄Π½ΡΠΌ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΡΡΠΎΡΡΡΡ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΊΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΌΠ½ΠΎΠΆΠ°ΡΡΡΡ (Π΅ΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ AND), Π»ΠΈΠ±ΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ (Π΅ΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ OR). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
postgres=# create index on t(b);
CREATE INDEX
postgres=# analyze t;
ANALYZE
postgres=# explain (costs off) select * from t where a BitmapAnd
-> Bitmap Index Scan on t_a_idx
Index Cond: (a Bitmap Index Scan on t_b_idx
Index Cond: (b = ‘a’::text)
(7 rows)
ΠΠ΄Π΅ΡΡ ΡΠ·Π΅Π» BitmapAnd ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π΄Π²Π΅ Π±ΠΈΡΠΎΠ²ΡΠ΅ ΠΊΠ°ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΡΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Β«ΠΈΒ».
Π‘ΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π±ΠΈΡΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΡΡΠ°Π½ΠΈΡΠ°Ρ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°? ΠΠ΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄Π°Π½Π½ΡΡ Π² ΡΡΡΠ°Π½ΠΈΡΠ°Ρ β Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½Ρ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π² Π·Π°ΠΏΡΠΎΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ORDER BY. ΠΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Β«ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Β» Π΄Π°Π½Π½ΡΠ΅ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ, ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ CLUSTER. Π’ΠΎΠ³Π΄Π° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π±ΠΈΡΠΎΠ²ΠΎΠΉ ΠΊΠ°ΡΡΡ β Π»ΠΈΡΠ½ΠΈΠΉ ΡΠ°Π³, ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΡΠ΅ΠΌ Π½Π΅ Ρ ΡΠΆΠ΅ (Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²). ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ Π·Π°Π³Π»ΡΠ΄ΡΠ²Π°Π΅Ρ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ :
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΈ Π½Π΅ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ:
postgres=# explain (costs off) select * from t where a
Π Π±ΡΠ΄Π΅Ρ ΠΏΡΠ°Π². ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΠΌ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π²ΡΡΠ΅ ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΡΠΎ Π΅ΡΡΡ ΡΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΡΡΡΠΎΠΊ Π΅ΠΌΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ. ΠΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ Π²ΡΠ±ΠΎΡΠΊΠΈ Π²ΠΎΠ·ΡΠ°ΡΡΠ°ΡΡ ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
Π‘ΠΈΡΡΠ°ΡΠΈΡ ΡΡΡΠ³ΡΠ±Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡ Β«Π²ΡΠ°Π·Π½ΠΎΠ±ΠΎΠΉΒ». ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎ Π΄Π»Ρ ΠΆΠ΅ΡΡΠΊΠΈΡ Π΄ΠΈΡΠΊΠΎΠ², Π³Π΄Π΅ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠ΄Π²Π΅Π΄Π΅Π½ΠΈΡ Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΊ Π΄ΠΎΡΠΎΠΆΠΊΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ΅ΠΌ ΡΠ°ΠΌΠΎ ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ; Π² ΡΠ»ΡΡΠ°Π΅ Π΄ΠΈΡΠΊΠΎΠ² SSD ΡΡΠΎΡ ΡΡΡΠ΅ΠΊΡ ΠΌΠ΅Π½Π΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½. ΠΠ»Ρ ΡΡΠ΅ΡΠ° ΡΠ°Π·Π½ΠΈΡΡ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° seq_page_cost ΠΈ random_page_cost, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ°Π±Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ², ΡΡΠΈΡΡΠ²Π°Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠ°Π·Π½ΡΡ Π΄ΠΈΡΠΊΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌ.
ΠΠΎΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ° β Π²Π΅ΡΠ½ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡΡΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ³ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΈΠ· Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π΄Π°Π½Π½ΡΠ΅? Π’Π°ΠΊΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡΠΈΠΌ (covering), ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Index Only Scan):
postgres=# vacuum t;
VACUUM
postgres=# explain (costs off) select a from t where a
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Π²Π΅ΡΡΠΈ Π½Π° ΠΌΡΡΠ»Ρ, ΡΡΠΎ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΏΠΎΠ»ΡΡΠ°Ρ Π²ΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ°. ΠΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ°ΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π² PostgreSQL Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΡΡΠ΄ΠΈΡΡ ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠΎΠΊ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΠΎΠΊ, ΠΏΠΎΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ ΠΏΠΎΠ΄ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠ°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π²ΠΈΠ΄Π½Ρ ΠΎΠ½ΠΈ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π·Π°Π³Π»ΡΠ΄ΡΠ²Π°ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π»ΡΡ Π±Ρ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ PostgreSQL ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π»Ρ ΡΠ°Π±Π»ΠΈΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΊΠ°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΈΡΡΠΊΠΈ (vacuum) ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π²Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π°ΡΠ°Π»Π° ΠΈ ΡΡΠΎΠ²Π½Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΡΠΎΠΊΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠ°ΠΊΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅, ΡΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ.
ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΡΡΠΊΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ². ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠΈΡΠ»ΠΎ Π½Π΅ΠΎΡΠΈΡΠ΅Π½Π½ΡΡ ΡΡΡΠΎΠΊ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π§ΠΈΡΠ»ΠΎ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ explain analyze:
postgres=# explain (analyze, costs off) select a from t where a
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ΅ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ (Heap Fetches: 0), ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π±ΡΠ»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΠΎΡΠΈΡΡΠΊΠ°. ΠΠΎΠΎΠ±ΡΠ΅, ΡΠ΅ΠΌ Π±Π»ΠΈΠΆΠ΅ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ ΠΊ Π½ΡΠ»Ρ, ΡΠ΅ΠΌ Π»ΡΡΡΠ΅.
ΠΠ΅ Π²ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ Ρ ΡΠ°Π½ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΡΡΠΎΠΊ ΡΠ°ΠΌΠΈ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠ°ΡΡ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ»Ρ Π² ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ ΠΊΠ°ΠΊ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ°, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ.
ΠΠΎ ΠΎΡΠΎΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΠΊ ΡΠ΅Π±Π΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ. ΠΠ±ΡΡΠ½Π°Ρ Π±ΡΠ»Π΅Π²Π° Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΡΠ΅Ρ Π·Π½Π°ΡΠ½ΡΡ; Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π»ΠΈ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ (ΠΎΡΡΡΠ΄Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ NULLS FIRST ΠΈ NULLS LAST); Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π°Π΄ΠΎ Π»ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π°Π³ΡΠ΅Π³Π°ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ; ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π΄Π»Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°β¦
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Ρ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π½Π΅ΡΡΠ½ΠΎΡΡΡ: Π½Π°Π΄ΠΎ Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π½Π΅Ρ? ΠΡΠ»ΠΈ Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ null, ΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½Π΅Π΅. ΠΠ°ΡΠΎ Π΅ΡΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π²ΠΈΠ΄Π° Β«ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅-ΠΏΠΎΠ»Π΅ IS [NOT] NULLΒ», Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΡΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΠ½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π²ΡΠ΅Ρ ΡΡΡΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Ρ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ).
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ° Π΅Π³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ΠΈ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΡΡΡΡ.
ΠΠ½Π΄Π΅ΠΊΡΡ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΠ»ΡΠΌ
Π£ΡΠ»ΠΎΠ²ΠΈΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ»ΠΎΠ½ΠΎΡΠ½ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΠΎΠ»ΡΠΌ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ:
postgres=# create index on t(a,b);
CREATE INDEX
postgres=# analyze t;
ANALYZE
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π±ΠΈΡΠΎΠ²ΡΡ ΠΊΠ°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π΄Π΅ΡΡ ΠΌΡ ΡΡΠ°Π·Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠ΅ TID Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
postgres=# explain (costs off) select * from t where a
ΠΠ½ΠΎΠ³ΠΎΠΊΠΎΠ»ΠΎΠ½ΠΎΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π²ΡΠ±ΠΎΡΠΊΠΈ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π° ΡΠ°ΡΡΡ ΠΏΠΎΠ»Π΅ΠΉ β Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ:
postgres=# explain (costs off) select * from t where a Bitmap Index Scan on t_a_b_idx
Index Cond: (a
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΅ΡΠ»ΠΈ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π½Π΅ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π²ΡΠ³ΠΎΠ΄Π½Π΅Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΌΡ Π·Π°ΡΡΠΎΠ½Π΅ΠΌ ΡΡΡ ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ btree.
ΠΠ΅ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΡΠΎΠ»Π±ΡΠ°ΠΌ.
ΠΠ½Π΄Π΅ΠΊΡΡ ΠΏΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ
ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠΈΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄ Β«ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅-ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅Β». Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅, ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ Π½ΠΈΠΌ:
postgres=# explain (costs off) select * from t where lower(b) = ‘a’;
QUERY PLAN
——————————————
Seq Scan on t
Filter: (lower((b)::text) = ‘a’::text)
(2 rows)
ΠΡΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠ΄Π° ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ»Π΅Π²Π° ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΡΡΠΎΡΠ»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡ ΠΏΠΎΠ»Ρ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΏΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ (ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ):
postgres=# create index on t(lower(b));
CREATE INDEX
postgres=# analyze t;
ANALYZE
postgres=# explain (costs off) select * from t where lower(b) = ‘a’;
QUERY PLAN
—————————————————-
Bitmap Heap Scan on t
Recheck Cond: (lower((b)::text) = ‘a’::text)
-> Bitmap Index Scan on t_lower_idx
Index Cond: (lower((b)::text) = ‘a’::text)
(4 rows)
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ»Ρ ΡΠ°Π±Π»ΠΈΡΡ, Π° ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ; ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π²ΠΈΠ΄Π° Β«ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅Β». ΠΡΠ»ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ β Π·Π°ΡΡΠ°ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΡΠΎ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ².
Π‘ΡΠΎΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°. ΠΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ pg_stats ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°:
postgres=# \d t
Table «public.t»
Column | Type | Modifiers
———+———+————
a | integer |
b | text |
c | boolean |
Indexes:
«t_a_b_idx» btree (a, b)
«t_a_idx» btree (a)
«t_b_idx» btree (b)
«t_lower_idx» btree (lower(b))
postgres=# select * from pg_stats where tablename = ‘t_lower_idx’;
.
ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΠ»ΠΎΠΌ ΠΊΠΎΡΠ·ΠΈΠ½ Π³ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ (ΡΡΠΈΡΡΠ²Π°Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ, ΡΡΠΎ ΠΈΠΌΡ ΡΡΠΎΠ»Π±ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π½ΡΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ):
postgres=# \d t_lower_idx
Index «public.t_lower_idx»
Column | Type | Definition
———+——+————
lower | text | lower(b)
btree, for table «public.t»
postgres=# alter index t_lower_idx alter column «lower» set statistics 69;
ALTER INDEX
Π§Π°ΡΡΠΈΡΠ½ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ
ΠΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΡΡΡΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠΈΠ»ΡΠ½ΠΎΠΉ Π½Π΅ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ: ΡΠ΅Π΄ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΈΡΠΊΠ°ΡΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π½ΠΎ ΡΠ°ΡΡΠΎΠ΅ ΠΏΡΠΎΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ.
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠΎ ΡΡΠΎΠ»Π±ΡΡ Β«cΒ», ΠΈ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ:
postgres=# create index on t(c);
CREATE INDEX
postgres=# analyze t;
ANALYZE
postgres=# explain (costs off) select * from t where c;
QUERY PLAN
——————————-
Index Scan using t_c_idx on t
Index Cond: (c = true)
Filter: c
(3 rows)
postgres=# explain (costs off) select * from t where not c;
QUERY PLAN
——————-
Seq Scan on t
Filter: (NOT c)
(2 rows)
ΠΡΠΈ ΡΡΠΎΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 276 ΡΡΡΠ°Π½ΠΈΡ:
postgres=# select relpages from pg_class where relname=’t_c_idx’;
relpages
———-
276
(1 row)
ΠΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΠ»Π±Π΅Ρ Β«cΒ» ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊ, 99% ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΡΠΎΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ:
postgres=# create index on t(c) where c;
CREATE INDEX
postgres=# analyze t;
ANALYZE
Π Π°Π·ΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΠΌΠ΅Π½ΡΡΠΈΠ»ΡΡ Π΄ΠΎ 5 ΡΡΡΠ°Π½ΠΈΡ:
postgres=# select relpages from pg_class where relname=’t_c_idx1′;
relpages
———-
5
(1 row)
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ°Π·Π½ΠΈΡΠ° Π² ΠΎΠ±ΡΠ΅ΠΌΠ΅ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²Π΅ΡΡΠΌΠ° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ.
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΡΡΠΎΠΊ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎ Π΄Π°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅:
postgres=# set enable_indexscan=off;
SET
postgres=# explain (costs off) select * from t order by a;
QUERY PLAN
———————
Sort
Sort Key: a
-> Seq Scan on t
(3 rows)
Π ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΡΠ°Π·Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ:
postgres=# set enable_indexscan=on;
SET
postgres=# explain (costs off) select * from t order by a;
QUERY PLAN
——————————-
Index Scan using t_a_idx on t
(1 row)
ΠΠ· Π²ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° ΡΠΎΠ»ΡΠΊΠΎ btree ΡΠΌΠ΅Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΡΠ»ΠΎΠΆΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ Π΄ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅
ΠΠ±ΡΡΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠΏΠ° SHARE Π½Π° ΡΠ°Π±Π»ΠΈΡΡ. Π’Π°ΠΊΠ°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ, Π½ΠΎ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ Π»ΡΠ±ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ° ΡΡΡΠΎΠΈΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ.
Π ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π½Π° ΡΠ°Π±Π»ΠΈΡΠ΅ t, Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ΅Π°Π½ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ:
postgres=# select mode, granted from pg_locks where relation = ‘t’::regclass;
mode | granted
————+———
ShareLock | t
(1 row)
ΠΡΠ»ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΡΠ°Π²ΠΊΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ β ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ ΡΠ΅Π°Π½ΡΡ Π±ΡΠ΄ΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°:
postgres=# create index concurrently on t(a);
CREATE INDEX
Π’Π°ΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΠΈΠΏΠ° SHARE UPDATE EXCLUSIVE, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ (Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΡΡΠΊΠΈ, Π°Π½Π°Π»ΠΈΠ·Π°, ΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π° ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΠ΅).
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΡΠΎΡΠΎΠ½Π°. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΈΠ½Π΄Π΅ΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠΎΠΈΡΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄Π° ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄Π²Π°, Π° Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΡ Π΄Π°Π½Π½ΡΠ΅.
ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ½Π΄Π΅ΠΊΡ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ, Π½ΠΎ Π² Β«Π½Π΅ΡΠ°Π±ΠΎΡΠ΅ΠΌΒ» ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ; Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°ΡΡ Π΅ΡΠ΅ ΡΠ°Π·. ΠΠ΅ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΎΡΠΌΠ΅ΡΠ΅Π½Ρ ΡΠ»ΠΎΠ²ΠΎΠΌ INVALID Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ psql \d, Π° ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠΌ:
postgres=# select indexrelid::regclass index_name, indrelid::regclass table_name from pg_index where not indisvalid;
index_name | table_name
————+————
t_a_idx | t
(1 row)
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅.