Когда Ρ€Π΅Ρ‡ΡŒ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ± эффСктивности Ρ€Π°Π±ΠΎΡ‚Ρ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² становится индСксированиС. Π‘Π΅Π· ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ настроСнных индСксов Π΄Π°ΠΆΠ΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ сСрвСры ΠΌΠΎΠ³ΡƒΡ‚ "Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ" ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ простых запросов, Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… β€” Ρ€Π°Π·Ρ€Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². Но Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ индСксированиС Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅? ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ΄Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² 1Π‘ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΌΠΈΠ½ΡƒΡ‚ оТидания?

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ индСксирования ΠΎΡ‚ основ Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ: ΠΊΠ°ΠΊ Π‘Π£Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Microsoft SQL Server ΠΈΠ»ΠΈ PostgreSQL) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ индСксы для ускорСния Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ индСксов ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8, ΠΈ ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ замСдлСнию систСмы Π² 10–100 Ρ€Π°Π· ΠΈΠ·-Π·Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… индСксов. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ практичСским ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ β€” ΠΎΡ‚ создания индСксов Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅ Π΄ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠ»Π°Π½ΠΎΠ² выполнСния запросов.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ индСксированиС ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π² 1Π‘

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² 1Π‘ β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск ΠΈ сортировку Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Π΅. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ: Π±Π΅Π· Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠ³ΠΎ указатСля Π²Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ страницу, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½ΠΎΠΌΠ΅Ρ€. ИндСкс Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ β€” ΠΎΠ½ создаёт "ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅" для Ρ‚Π°Π±Π»ΠΈΡ† Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, позволяя Π‘Π£Π‘Π” Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ записи Π·Π° Π΄ΠΎΠ»ΠΈ сСкунды вмСсто ΠΌΠΈΠ½ΡƒΡ‚.

Π’ контСкстС 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ индСксы особСнно ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ:

  • πŸ“Š ΠžΠ±ΡŠΡ‘ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… Π±Π°Π·Π°Ρ… (бухгалтСрия, торговля, Π—Π£ΠŸ) исчисляСтся ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ записСй.
  • ⚑ Запросы часто содСрТат условия ΠΏΠΎ нСскольким полям (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Π΄Π°Ρ‚Π΅, ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Ρƒ ΠΈ суммС).
  • πŸ”„ Π Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ мСсяца, расчёт Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ массовыС Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ, Π³Π΄Π΅ каТдая миллисСкунда Π½Π° счСту.

Π‘Π΅Π· индСксов Π΄Π°ΠΆΠ΅ простой ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ°ΠΌ Π·Π° Π³ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ часами. Но Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ: индСксы Π½Π΅ бСсплатны. Они Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ мСсто Π½Π° дискС (ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎ 30–50% ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) ΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π’Π‘Π’ΠΠ’ΠšΠ/ΠžΠ‘ΠΠžΠ’Π›Π•ΠΠ˜Π•/Π£Π”ΠΠ›Π•ΠΠ˜Π•, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π‘Π£Π‘Π” Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ индСксы Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии.

πŸ“Š Как часто Π²Ρ‹ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ индСксы Π² своих Π±Π°Π·Π°Ρ… 1Π‘?
Никогда Π½Π΅ задумывался
Волько ΠΏΡ€ΠΈ явных Ρ‚ΠΎΡ€ΠΌΠΎΠ·Π°Ρ…
РСгулярно ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΡŽ
ΠŸΠΎΡ€ΡƒΡ‡Π°ΡŽ администратору

Π’ΠΈΠΏΡ‹ индСксов Π² 1Π‘: кластСрныС, нСкластСрныС ΠΈ полнотСкстовыС

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ… рСляционных Π‘Π£Π‘Π”, поэтому Ρ‚ΠΈΠΏΡ‹ индСксов ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ систСмой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MS SQL ΠΈΠ»ΠΈ PostgreSQL). Однако Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈΡ… примСнСния Π² 1Π‘ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°. Рассмотрим основныС Π²ΠΈΠ΄Ρ‹:

Π’ΠΈΠΏ индСкса ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π² 1Π‘ ΠŸΠ»ΡŽΡΡ‹ ΠœΠΈΠ½ΡƒΡΡ‹
ΠšΠ»Π°ΡΡ‚Π΅Ρ€Π½Ρ‹ΠΉ ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ физичСский порядок хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Волько ΠΎΠ΄ΠΈΠ½ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. ИндСкс ΠΏΠΎ полю Бсылка Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ быстрый доступ ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ). Максимальная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ. ЗамСдляСт вставку Π΄Π°Π½Π½Ρ‹Ρ…, Ссли ΠΊΠ»ΡŽΡ‡ Π½Π΅ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GUID).
НСкластСрный Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ структуру для ускорСния поиска ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким полям. ИндСкс ΠΏΠΎ полям Π”Π°Ρ‚Π° ΠΈ ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠŸΠΎΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΠ΅Π’ΠΎΠ²Π°Ρ€ΠΎΠ². УскоряСт Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ полям. Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ мСсто Π½Π° дискС.
ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉ ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ содСрТимому тСкстовых ΠΏΠΎΠ»Π΅ΠΉ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠΎΡ€Ρ„ΠΎΠ»ΠΎΠ³ΠΈΡŽ). Поиск ΠΏΠΎ наимСнованию Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ коммСнтариям Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ слоТныС тСкстовыС запросы. Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ настройки ΠΈ обновлСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.
Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΠ»Π΅ (ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ). ИндСкс ΠΏΠΎ полю НомСрДокумСнта Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π‘Ρ‡Ρ‘Ρ‚Π€Π°ΠΊΡ‚ΡƒΡ€Π°. ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ошибки ΠΏΡ€ΠΈ вставкС Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ².

Π’ 1Π‘ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ вострСбованы нСкластСрныС индСксы, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π³ΠΈΠ±ΠΊΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ запросы. НапримСр, Ссли Π²Ρ‹ часто Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ°ΠΌ с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ Π΄Π°Ρ‚Π΅ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ составной индСкс ΠΏΠΎ этим Π΄Π²ΡƒΠΌ полям. Однако Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ: ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ индСксы ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, особСнно ΠΏΡ€ΠΈ массовых опСрациях записи.

πŸ’‘

ΠŸΠ΅Ρ€Π΅Π΄ созданиСм индСкса ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈ Π΅Π³ΠΎ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ составной индСкс. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ индСкс ΠΏΠΎ полям (А, Π‘, Π’), Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ индСкс ΠΏΠΎ полю (А) ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π΅Π½.

Как 1Π‘ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с индСксами: ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ

Когда Π²Ρ‹ выполняСтС запрос Π² 1Π‘, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² SQL-запрос ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ Π² Π‘Π£Π‘Π”. Π”Π°Π»Π΅Π΅ Π‘Π£Π‘Π” Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ запрос ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ процСсс называСтся составлСниСм ΠΏΠ»Π°Π½Π° выполнСния. Рассмотрим, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

  1. ΠŸΠ°Ρ€ΡΠΈΠ½Π³ запроса: 1Π‘ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ваш запрос Π½Π° языкС 1Π‘:Запросы ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² SQL.
  2. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ: Π‘Π£Π‘Π” Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ статистику ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΈ индСксам, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½.
  3. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ индСксы (ΠΈΠ»ΠΈ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ссли индСксы нСэффСктивны).

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚: 1Π‘ Π½Π΅ управляСт индСксами Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ β€” это Π·Π°Π΄Π°Ρ‡Π° Π‘Π£Π‘Π”. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° процСсс, явно указывая индСксы Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· SQL-Ρ…ΠΈΠ½Ρ‚Ρ‹ (Π² Ρ€Π΅Π΄ΠΊΠΈΡ… случаях). НапримСр, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ запрос всСгда Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ полю Π”Π°Ρ‚Π°, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΏΠΎ этому полю Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚: Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½Ρ‹ выполнСния запросов прямо ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π° (мСню АдминистрированиС β†’ ВСстированиС ΠΈ исправлСниС β†’ ΠŸΠ»Π°Π½Ρ‹ запросов). Π­Ρ‚ΠΎ позволяСт ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π° Π³Π΄Π΅ происходит ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Table Scan).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ "ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс"?

Π­Ρ‚ΠΎ индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всС поля, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для выполнСния запроса, благодаря Ρ‡Π΅ΠΌΡƒ Π‘Π£Π‘Π” Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ самой Ρ‚Π°Π±Π»ΠΈΡ†Π΅. НапримСр, Ссли ваш запрос Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ поля Π”Π°Ρ‚Π° ΠΈ Π‘ΡƒΠΌΠΌΠ°, Π° индСкс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±Π° этих поля, Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ взяты прямо ΠΈΠ· индСкса.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: ΠΊΠΎΠ³Π΄Π° индСксы ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚, Π° ΠΊΠΎΠ³Π΄Π° тормозят

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии, Π³Π΄Π΅ индСксы ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, ΠΈ Π³Π΄Π΅ ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ.

βœ… Когда индСксы ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ:

  • πŸ” Поиск ΠΏΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ совпадСнию: Запрос ВЫБРАВЬ Π‘Ρ‡Ρ‘Ρ‚Π€Π°ΠΊΡ‚ΡƒΡ€Π° Π“Π”Π• НомСр = "12345" Π±ΡƒΠ΄Π΅Ρ‚ молниСносным ΠΏΡ€ΠΈ индСксС ΠΏΠΎ полю НомСр.
  • πŸ“… Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ Π΄Π°Ρ‚: ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ°ΠΌ Π·Π° мСсяц с индСксом ΠΏΠΎ Π”Π°Ρ‚Π° выполнится Π·Π° сСкунды.
  • πŸ”€ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°: Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ Π΄Π°Ρ‚Π΅, индСкс ΠΏΠΎ этому полю ΠΈΠ·Π±Π°Π²ΠΈΡ‚ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ SORT Π² памяти.
  • πŸ”— Бвязи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ: Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΏΠΎ внСшним ΠΊΠ»ΡŽΡ‡Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, БсылкаНаДокумСнт) ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ соСдинСния (JOIN).

❌ Когда индСксы тормозят систСму:

  • πŸ“₯ Массовая Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…: ΠŸΡ€ΠΈ вставкС 100 000 строк Π‘Π£Π‘Π” Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС индСксы, Ρ‡Ρ‚ΠΎ замСдляСт процСсс.
  • πŸ”„ ЧастыС обновлСния: Если ΠΏΠΎΠ»Π΅, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ построСн индСкс, часто мСняСтся (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, статус Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°), ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ UPDATE Π±ΡƒΠ΄Π΅Ρ‚ дольшС.
  • πŸ—‘οΈ Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ индСксы: 10 индСксов Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с 1 ΠΌΠ»Π½ записСй ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Ρ‹ дискового пространства.
  • 🎯 НСсСлСктивныС поля: ИндСкс ΠΏΠΎ полю Пол (муТской/ТСнский) бСсполСзСн β€” Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ Π½Π΅ΠΌΡƒ Π½Π΅ ускорится.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ: Π’ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±Π°Π· 1Π‘:Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»Π΅ΠΉ запрос ΠΏΠΎ остаткам Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² выполнялся 40 ΠΌΠΈΠ½ΡƒΡ‚. ПослС добавлСния составного индСкса ΠΏΠΎ полям Π‘ΠΊΠ»Π°Π΄, НомСнклатура ΠΈ Π₯арактСристика врСмя ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ 2 ΠΌΠΈΠ½ΡƒΡ‚. Однако ΠΏΡ€ΠΈ этом Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·Ρ‹ вырос Π½Π° 15% ΠΈΠ·-Π·Π° индСксов.

πŸ’‘

Π˜Π½Π΄Π΅ΠΊΡΡ‹ эффСктивны, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ (ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ) ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² условиях Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ сортировки.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ индСксы Π² 1Π‘

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ индСксы Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°) ΠΈΠ»ΠΈ Π‘Π£Π‘Π” (для ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрного). Рассмотрим ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

πŸ“ Настройка индСксов Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅ (Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚)

Для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ индСксы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π² индСксируСмыС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, справочники ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹). Π§Ρ‚ΠΎΠ±Ρ‹ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ индСксируСмоС ΠΏΠΎΠ»Π΅:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, справочник НомСнклатура).
  2. Π’ ΠΏΠ°Π»ΠΈΡ‚Ρ€Π΅ свойств Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Артикул).
  3. УстановитС Ρ„Π»Π°Π³ Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² свойствах поля.
  4. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ β†’ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…).

ПолС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² WHERE ΠΈΠ»ΠΈ ORDER BY|

ПолС ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ (ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ)|

ИндСкс Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅|

Π£Ρ‡Ρ‘Ρ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° запись (индСкс Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅Π½ для часто обновляСмых ΠΏΠΎΠ»Π΅ΠΉ)-->

πŸ–₯️ Настройка индСксов Π² Π‘Π£Π‘Π” (ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚)

Для Π±Π°Π· Π½Π° MS SQL Server ΠΈΠ»ΠΈ PostgreSQL индСксы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π‘Π£Π‘Π”. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

  • πŸ› οΈ Π§Π΅Ρ€Π΅Π· консоль Π‘Π£Π‘Π”: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ CREATE INDEX.
  • πŸ–±οΈ Π§Π΅Ρ€Π΅Π· графичСскиС инструмСнты: НапримСр, SQL Server Management Studio.
  • πŸ€– АвтоматичСски: НСкоторыС Π‘Π£Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PostgreSQL) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ индСксы для ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ автоматичСски.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для создания индСкса Π² MS SQL:

CREATE INDEX IX_Document_Date ON dbo._Document123 (Date_Time)

Π“Π΄Π΅ _Document123 β€” Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² Π±Π°Π·Π΅ 1Π‘ (ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π˜ΠΌΡΠ’Π°Π±Π»ΠΈΡ†Ρ‹() Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅).

ВЫБРАВЬ

ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.Имя,

ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.Π˜ΠΌΡΠ’Π°Π±Π»ΠΈΡ†Ρ‹

Π˜Π—

v8_Metadata AS ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅

-->

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: особСнности индСксирования Π² 1Π‘

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 1Π‘ Π½Π΅ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ индСксы, созданныС Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅. Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ индСксы Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π‘Π£Π‘Π”! НапримСр, Ссли Π²Ρ‹ поставили Ρ„Π»Π°Π³ Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для поля Π² справочникС, Π½ΠΎ Π² MS SQL индСкс Π½Π΅ создан β€” Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ этому полю Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ.

Анализ ΠΈ оптимизация индСксов: инструмСнты ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс β€” ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° Π΄Π΅Π»Π°. Π’Π°ΠΆΠ½ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅. Π’ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ инструмСнты для Π°Π½Π°Π»ΠΈΠ·Π°:

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ примСнСния Π² 1Π‘
ΠŸΠ»Π°Π½Ρ‹ выполнСния запросов ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π° Π³Π΄Π΅ происходит сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅: АдминистрированиС β†’ ВСстированиС ΠΈ исправлСниС β†’ ΠŸΠ»Π°Π½Ρ‹ запросов.
Бтатистика использования индСксов ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ индСксы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. Π’ MS SQL: запрос ΠΊ систСмным прСдставлСниям sys.dm_db_index_usage_stats.
ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ 1Π‘ ЗамСряСт врСмя выполнСния запросов ΠΈ выявляСт "ΡƒΠ·ΠΊΠΈΠ΅ мСста". Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· БСрвис β†’ ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅.
ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π‘Π£Π‘Π” ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° диски, CPU ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с индСксами. Π’ PostgreSQL: ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° pg_stat_activity.

Один ΠΈΠ· самых эффСктивных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ запросов ΠΏΠΎΠ΄ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ индСксы. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ индСкс ΠΏΠΎ полю Π”Π°Ρ‚Π°, Π½ΠΎ Π² запросС Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΠΠ§ΠΠ›ΠžΠŸΠ•Π Π˜ΠžΠ”Π(Π”Π°Ρ‚Π°, ΠœΠ΅ΡΡΡ†), Π‘Π£Π‘Π” Π½Π΅ смоТСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ индСкс. РСшСниС β€” ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ условиС:

// ΠŸΠ»ΠΎΡ…ΠΎ (индСкс Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ):

Π“Π”Π• ΠΠΠ§ΠΠ›ΠžΠŸΠ•Π Π˜ΠžΠ”Π(Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π”Π°Ρ‚Π°, ΠœΠ΅ΡΡΡ†) = &Π”Π°Ρ‚Π°

// Π₯ΠΎΡ€ΠΎΡˆΠΎ (индСкс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ):

Π“Π”Π• Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π”Π°Ρ‚Π° >= ΠΠΠ§ΠΠ›ΠžΠŸΠ•Π Π˜ΠžΠ”Π(&Π”Π°Ρ‚Π°, ΠœΠ΅ΡΡΡ†)

И Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π”Π°Ρ‚Π° < ΠΠΠ§ΠΠ›ΠžΠŸΠ•Π Π˜ΠžΠ”Π(&Π”Π°Ρ‚Π°, ΠœΠ΅ΡΡΡ†) + 31

πŸ’‘

Если запрос выполняСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠ»Π°Π½ выполнСния. Часто ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² отсутствии индСкса, Π° Π² Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ условии (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π°Π΄ индСксируСмыми полями).

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с индСксами Π² 1Π‘

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ настройкС индСксов. Π’ΠΎΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС:

  1. Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΏΠΎ всСм полям: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ индСксов "Π½Π° всякий случай" ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π°Π·Π΄ΡƒΡ‚ΠΈΡŽ Π±Π°Π·Ρ‹ ΠΈ замСдлСнию записСй. РСшСниС: Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² запросах.
  2. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ порядка ΠΏΠΎΠ»Π΅ΠΉ Π² составных индСксах: ИндСкс ΠΏΠΎ (А, Π‘) Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Π‘. РСшСниС: Поля с высокой ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ.
  3. Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΏΠΎ вычисляСмым полям: НапримСр, индСкс ΠΏΠΎ полю ПолноСНаимСнованиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ формируСтся динамичСски. РСшСниС: Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ вычисляСмыС значСния Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ»Π΅ ΠΈ индСксируйтС Π΅Π³ΠΎ.
  4. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ пСрСстроСния индСксов: Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ индСксы Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ сниТаСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. РСшСниС: РСгулярно выполняйтС REINDEX (Π² PostgreSQL) ΠΈΠ»ΠΈ REBUILD (Π² MS SQL).
  5. Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΏΠΎ полям с Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ: НапримСр, ΠΏΠΎ полю ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ (истина/лоТь). РСшСниС: УдаляйтС Ρ‚Π°ΠΊΠΈΠ΅ индСксы β€” ΠΎΠ½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тормозят запись.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° распространённая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” нСсоотвСтствиС индСксов Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅ ΠΈ Π‘Π£Π‘Π”. НапримСр, Π²Ρ‹ поставили Ρ„Π»Π°Π³ Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅, Π½ΠΎ Π·Π°Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ индСкс Π½Π΅ создался Π² Π‘Π£Π‘Π”, Π° Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, создан Π»ΠΈ индСкс Π² Π‘Π£Π‘Π”?

Π’ MS SQL Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ запрос:

SELECT * FROM sys.indexes

WHERE object_id = OBJECT_ID('dbo._Document123')

Π“Π΄Π΅ _Document123 β€” имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ индСксов Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ рСгулярного обслуТивания, особСнно Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Π±Π°Π·Π°Ρ…. Π’ΠΎΡ‚ Ρ‡Π΅ΠΊ-лист для администраторов:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ статистику использования индСксов (Ρ€Π°Π· Π² ΠΊΠ²Π°Ρ€Ρ‚Π°Π»)|

ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ индСксы (Ρ€Π°Π· Π² ΠΏΠΎΠ»Π³ΠΎΠ΄Π°)|

Π£Π΄Π°Π»ΡΡ‚ΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ индСксы (ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°)|

ΠžΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ статистику Π‘Π£Π‘Π” послС массовых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…|

Π’Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ послС добавлСния Π½ΠΎΠ²Ρ‹Ρ… индСксов-->

Для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ этих процСссов ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

  • πŸ“… Π Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ задания Π² 1Π‘: НапримСр, запуск ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ пСрСстроСния индСксов ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ.
  • πŸ€– Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Π½Π° сторонС Π‘Π£Π‘Π”: Π’ MS SQL это Maintenance Plans, Π² PostgreSQL β€” cron-Π·Π°Π΄Π°Ρ‡ΠΈ с REINDEX.
  • πŸ“Š ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ Zabbix ΠΈΠ»ΠΈ Grafana для отслСТивания Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния запросов.

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ индСксов послС:

  • Массовой Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, пСрСнос остатков).
  • ОбновлСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘.
  • ИзмСнСния структуры Π±Π°Π·Ρ‹ (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для пСрСстроСния всСх индСксов Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ MS SQL:

ALTER INDEX ALL ON dbo._Document123 REBUILD
πŸ’‘

Для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Π±Π°Π· пСрСстроСниС индСксов выполняйтС Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ минимальной Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎΡ‡ΡŒΡŽ). Π’ MS SQL ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ WITH (ONLINE = ON), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π²ΠΎ врСмя Ρ€Π΅Π±ΠΈΠ»Π΄Π°.

FAQ: ЧастыС вопросы ΠΎΠ± индСксировании Π² 1Π‘

πŸ”Ή Бколько индСксов ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ?

ВСхничСски ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π΅Ρ‚ (Π² MS SQL β€” Π΄ΠΎ 999 нСкластСрных индСксов Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ), Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ рСкомСндуСтся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 5–10. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ индСкс:

  • Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·Ρ‹.
  • ЗамСдляСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ INSERT/UPDATE/DELETE.
  • УслоТняСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.

ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ количСство опрСдСляСтся ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ: Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ индСкс, Π·Π°ΠΌΠ΅Ρ€ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° запись.

πŸ”Ή ΠŸΠΎΡ‡Π΅ΠΌΡƒ 1Π‘ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠΎΠΉ индСкс?

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько:

  1. ИндСкс Π½Π΅ создан Π² Π‘Π£Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ поставили Ρ„Π»Π°Π³ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅, Π½ΠΎ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ Π±Π°Π·Ρƒ).
  2. УсловиС Π² запросС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π°Π΄ индСксируСмым ΠΏΠΎΠ»Π΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π›Π•Π’(НаимСнованиС, 3) = "АБВ").
  3. Π‘Π£Π‘Π” Ρ€Π΅ΡˆΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Table Scan) быстрСС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли индСкс ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ 80% Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹).
  4. Бтатистика Π² Π‘Π£Π‘Π” устарСла (Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ UPDATE STATISTICS).

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, посмотритС ΠΏΠ»Π°Π½ выполнСния запроса Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· EXPLAIN ANALYZE Π² PostgreSQL.

πŸ”Ή Как ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля с Ρ‚ΠΈΠΏΠΎΠΌ "Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹"?

Π’ 1Π‘ поля Ρ‚ΠΈΠΏΠ° Π‘Ρ‚Ρ€ΠΎΠΊΠ° с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ (ΠΈΠ»ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ > 8000 символов Π² MS SQL) Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ проиндСксированы Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. РСшСния:

  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ с Ρ…ΡΡˆΠ΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MD5) ΠΈΠ»ΠΈ усСчённой строкой ΠΈ индСксируйтС Π΅Π³ΠΎ.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ полнотСкстовый индСкс (Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ содСрТимому).
  • Π Π°Π·Π±Π΅ΠΉΡ‚Π΅ строку Π½Π° части ΠΈ индСксируйтС ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 100 символов).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания Ρ…ΡΡˆ-поля Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠŸΡ€ΠΈΠ—Π°ΠΏΠΈΡΠΈ()

Если ИзмСнСно("ОписаниС") Π’ΠΎΠ³Π΄Π°

Π₯эшОписания = Π‘Ρ‚Ρ€ΠΎΠΊΠ°(Новый Π₯ΡΡˆΠ”Π°Π½Π½Ρ‹Ρ…(ОписаниС, "MD5"));

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

πŸ”Ή Π’Π»ΠΈΡΡŽΡ‚ Π»ΠΈ индСксы Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования?

Π”Π°, Π½ΠΎ косвСнно:

  • πŸ“ˆ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·Ρ‹: Π‘ΠΎΠ»ΡŒΡˆΠ΅ индСксов β†’ большС Π΄Π°Π½Π½Ρ‹Ρ… β†’ дольшС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.
  • πŸ”„ Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° диск: ΠŸΡ€ΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ бэкапС измСнСния Π² индСксах Ρ‚ΠΎΠΆΠ΅ Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Однако влияниС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ (5–15% ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ бэкапа). Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π²Π°ΠΆΠ½Π΅Π΅ влияниС индСксов Π½Π° восстановлСниС Π±Π°Π·Ρ‹: ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ индСксов ΠΈΡ… пСрСстроСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ часы.

πŸ”Ή МоТно Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² 1Π‘?

НСт, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠŸΠΎΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΠ΅Π’ΠΎΠ²Π°Ρ€ΠΎΠ².ΠžΡΡ‚Π°Ρ‚ΠΊΠΈ) β€” это Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, создаваСмыС Π½Π° Π»Π΅Ρ‚Ρƒ. Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… нСльзя. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запрос ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ использовал индСксы Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

// МСдлСнно (Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π±Π΅Π· индСксов):

ВЫБРАВЬ

ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ².НомСнклатура,

ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ².ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ

Π˜Π—

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠŸΠΎΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΠ΅Π’ΠΎΠ²Π°Ρ€ΠΎΠ².ΠžΡΡ‚Π°Ρ‚ΠΊΠΈ КАК ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ²

// Быстро (явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ индСксируСмых ΠΏΠΎΠ»Π΅ΠΉ):

ВЫБРАВЬ

ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ².НомСнклатура КАК НомСнклатура,

БУММА(ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ².ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ) КАК ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ

Π˜Π—

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠŸΠΎΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΠ΅Π’ΠΎΠ²Π°Ρ€ΠΎΠ².ΠžΡΡ‚Π°Ρ‚ΠΊΠΈ КАК ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ²

Π“Π”Π•

ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ².Π‘ΠΊΠ»Π°Π΄ = &Π‘ΠΊΠ»Π°Π΄

Π‘Π“Π Π£ΠŸΠŸΠ˜Π ΠžΠ’ΠΠ’Π¬ ПО

ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ².НомСнклатура