Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΊ спасти Π²Π°ΡˆΡƒ Π±Π°Π·Ρƒ ΠΎΡ‚ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ Π² Β«Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ ящик» с нСпрСдсказуСмым ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ настройка индСксов ускоряСт Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² 10–100 Ρ€Π°Π·, Π½ΠΎ ошибки ΠΏΡ€ΠΈ ΠΈΡ… создании Π²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ эффСкту: замСдлСнию ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Π·Ρ‹. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ ΠΏΡ€ΠΎ Β«Π²ΠΎΠ»ΡˆΠ΅Π±Π½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒΒ», Π° ΠΏΡ€ΠΎ осознанный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·Π° запросов Π΄ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

МногиС администраторы Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ Π½Π°ΡƒΠ³Π°Π΄, копируя Ρ‡ΡƒΠΆΠΈΠ΅ настройки ΠΈΠ»ΠΈ слСдуя совСтам ΠΈΠ· Ρ„ΠΎΡ€ΡƒΠΌΠΎΠ² 2010 Π³ΠΎΠ΄Π°. ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ индСксов Π² 1Π‘ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ измСнилась с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 8.3.20+. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, учитывая особСнности SQL-сСрвСров (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ PostgreSQL), Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приводят ΠΊ «индСксному хаосу» β€” ΠΊΠΎΠ³Π΄Π° систСма Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ большС рСсурсов Π½Π° обслуТиваниС индСксов, Ρ‡Π΅ΠΌ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запросов.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ настройкС, ΠΎΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ сСбС Π½Π° Ρ‚Ρ€ΠΈ вопроса:

  1. КакиС ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² вашСй Π±Π°Π·Π΅ тормозят (ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΠΈ, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° справочников)?
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ SQL-сСрвСр ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅?
  3. Π“ΠΎΡ‚ΠΎΠ²Ρ‹ Π»ΠΈ Π²Ρ‹ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ индСксы ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ врСмя выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ?
πŸ“Š Какой Ρ‚ΠΈΠΏ Π±Π°Π·Ρ‹ 1Π‘ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅?
Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
Microsoft SQL Server
PostgreSQL
ΠžΡ€Π°ΠΊΠ» ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ
НС знаю

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

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

Π’ 1Π‘ индСксы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСски для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Бсылка Π² справочниках), Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся индСксация:

  • πŸ“‰ ΠœΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹ β€” Ссли гСнСрация ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 30 сСкунд, скорСС всСго, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ индСксы ΠΏΠΎ полям Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ.
  • πŸ” Π”ΠΎΠ»Π³ΠΈΠΉ поиск β€” ΠΊΠΎΠ³Π΄Π° поиск ΠΏΠΎ справочнику ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ нСсколько сСкунд.
  • πŸ“Š Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими ΠΎΠ±ΡŠΡ‘ΠΌΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с тысячами строк.

Однако индСксы β€” это Π½Π΅ панацСя. Они Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ мСсто Π½Π° дискС ΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи (вставку, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… приходится ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈ индСксы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±Π΅ΡΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠ΅ созданиС индСксов Π²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

πŸ’‘

ΠŸΠ΅Ρ€Π΅Π΄ созданиСм индСксов всСгда провСряйтС, ΠΊΠ°ΠΊΠΈΠ΅ запросы тормозят, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Плана выполнСния запроса Π² ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅. ИндСкс, созданный Β«Π½Π° всякий случай», часто приносит большС Π²Ρ€Π΅Π΄Π°, Ρ‡Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·Ρ‹.

2. Π’ΠΈΠ΄Ρ‹ индСксов Π² 1Π‘: ΠΊΠ°ΠΊΠΈΠ΅ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ нСсколько Ρ‚ΠΈΠΏΠΎΠ² индСксов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅ΡˆΠ°Π΅Ρ‚ свои Π·Π°Π΄Π°Ρ‡ΠΈ. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ большиС Π³Ρ€ΡƒΠΏΠΏΡ‹: автоматичСскиС (ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ) ΠΈ Ρ€ΡƒΡ‡Π½Ρ‹Π΅ (Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ). Рассмотрим основныС Π²ΠΈΠ΄Ρ‹:

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

Особого внимания Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ составныС индСксы. НапримСр, Ссли Π²Ρ‹ часто выполняСтС запрос Π²ΠΈΠ΄Π°:

ВЫБРАВЬ *

Π˜Π— Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π—Π°ΠΊΠ°Π·ΠŸΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»Ρ

Π“Π”Π• ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ = &ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ И Π”Π°Ρ‚Π° ΠœΠ•Π–Π”Π£ &ДатаНачало И &Π”Π°Ρ‚Π°ΠšΠΎΠ½Π΅Ρ†

Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΏΠΎ полям (ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚, Π”Π°Ρ‚Π°). Однако Ссли Π² запросС поля ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ порядкС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сначала Π”Π°Ρ‚Π°, ΠΏΠΎΡ‚ΠΎΠΌ ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚), Ρ‚Π°ΠΊΠΎΠΉ индСкс Π½Π΅ сработаСт!

ΠŸΠΎΡ‡Π΅ΠΌΡƒ порядок ΠΏΠΎΠ»Π΅ΠΉ Π² составном индСксС Π²Π°ΠΆΠ΅Π½?

Π‘Π£Π‘Π” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ индСкс Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли поля Π² запросС ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Ρ‡Ρ‚ΠΎ ΠΈ Π² индСксС. НапримСр, индСкс (А, Π‘) ускорит запрос с условиСм Π“Π”Π• А = 1 И Π‘ = 2, Π½ΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ Π“Π”Π• Π‘ = 2 (Ссли ΠΏΠΎΠ»Π΅ А Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅).

3. Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ Π² 1Π‘: пошаговая инструкция

ΠŸΡ€ΠΎΡ†Π΅ΡΡ настройки индСксов зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ваша Π±Π°Π·Π°: Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрный (с SQL-сСрвСром). Рассмотрим ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

3.1. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 1Π‘

Π’ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ возмоТности индСксации ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ сама управляСт структурой Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ:

  • πŸ”§ ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ индСксы для ΠΏΠΎΠ»Π΅ΠΉ справочников ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅.
  • πŸ“ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ структуру Π±Π°Π·Ρ‹ (дСфрагмСнтация, сТатиС).
  • ⚠️ НСльзя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСксы Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π‘Π£Π‘Π” (ΠΊΠ°ΠΊ Π² SQL Server).

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ индСкс для поля Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅:

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

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию Π±Π°Π·Ρ‹|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свободноС мСсто Π½Π° дискС (индСксы ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°)|Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ· Π±Π°Π·Ρ‹|ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ измСнСния Π½Π° ΠΊΠΎΠΏΠΈΠΈ Π±Π°Π·Ρ‹-->

3.2. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ (SQL Server, PostgreSQL)

Π’ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Ρ€Π΅ΠΆΠΈΠΌΠ΅ индСксы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π‘Π£Π‘Π”, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ большС возмоТностСй, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Π½ΠΈΠΉ SQL. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ шаги:

  1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ поля Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² индСксах (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ План выполнСния запроса Π² 1Π‘).
  2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ сСрвСру Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· SQL Server Management Studio ΠΈΠ»ΠΈ pgAdmin для PostgreSQL).
  3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ индСкс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SQL-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для SQL Server:
    CREATE INDEX IX_Document_Sale_ContractorDate
    

    ON [dbo].[Document_Sale] (Contractor, DocDate)

  4. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ статистику индСксов (Π² SQL Server β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° UPDATE STATISTICS).
  5. ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов Π΄ΠΎ ΠΈ послС создания индСкса.

Для PostgreSQL синтаксис Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ:

CREATE INDEX idx_document_sale_contractor_date

ON document_sale (contractor, doc_date);

πŸ’‘

Π’ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ индСксы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π‘Π£Π‘Π”, Π° Π½Π΅ Π² ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅ 1Π‘. Π­Ρ‚ΠΎ позволяСт Π³ΠΈΠ±ΠΊΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ запросы, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Π½ΠΈΠΉ SQL.

4. Как Π½Π°ΠΉΡ‚ΠΈ Β«ΡƒΠ·ΠΊΠΈΠ΅ мСста» ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ индСксы Π½ΡƒΠΆΠ½Ρ‹

Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСксы Β«Π²ΡΠ»Π΅ΠΏΡƒΡŽΒ» β€” Ρ…ΡƒΠ΄ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ запросы тормозят, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ± индСксации. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

4.1. Анализ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов Π² 1Π‘

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 Π΅ΡΡ‚ΡŒ встроСнныС инструмСнты для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

  • πŸ” План выполнСния запроса β€” ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π‘Π£Π‘Π” выполняСт запрос ΠΈ Π³Π΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ.

    Π§Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ:

    1. Π’ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠΊΠ½ΠΎ запроса (Π€Π°ΠΉΠ» β†’ Новый β†’ Запрос).
    2. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ваш запрос (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°).
    3. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ выполнСния (ΠΈΠ»ΠΈ F5).
  • πŸ“Š Π–ΡƒΡ€Π½Π°Π» рСгистрации β€” позволяСт ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ большС всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • πŸ› οΈ ВСстированиС ΠΈ исправлСниС β€” встроСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности Π±Π°Π·Ρ‹ (АдминистрированиС β†’ ВСстированиС ΠΈ исправлСниС).
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ»Π°Π½Π° выполнСния, Π³Π΄Π΅ Π²ΠΈΠ΄Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ:

    
    

    |--Clustered Index Scan(OBJECT:([dbo].[Document_Sale]...), WHERE:([DocDate]>=... AND [DocDate]<=...))

    --Cost: 85% (это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ 85% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ запроса тратится Π½Π° сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹)

    Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Clustered Index Scan ΠΈΠ»ΠΈ Table Scan с высоким ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠΌ (Cost), это сигнал, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ΅Π½ индСкс.

    4.2. ИспользованиС SQL-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°

    Для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ инструмСнты Π‘Π£Π‘Π”:

    • πŸ–₯️ Π’ SQL Server: SQL Server Profiler ΠΈΠ»ΠΈ Extended Events.
    • 🐧 Π’ PostgreSQL: EXPLAIN ANALYZE ΠΏΠ΅Ρ€Π΅Π΄ запросом.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для PostgreSQL:

    EXPLAIN ANALYZE
    

    SELECT * FROM document_sale

    WHERE contractor = 'ООО Ромашка' AND doc_date BETWEEN '2026-01-01' AND '2026-01-31';

    Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Seq Scan (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сканированиС), Π·Π½Π°Ρ‡ΠΈΡ‚, индСкс ΠΏΠΎ полям contractor ΠΈ doc_date отсутствуСт ΠΈΠ»ΠΈ нСэффСктивСн.

    πŸ’‘

    НС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ΡΡŒ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «тяТёлых» запросов. Иногда ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° кроСтся Π² сотнях ΠΌΠ΅Π»ΠΊΠΈΡ… Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² суммС тормозят систСму.

    5. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ настройкС индСксации

    Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ администраторы 1Π‘ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сводят Π½Π° Π½Π΅Ρ‚ всС усилия ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ΠΎΡ‚ самыС распространённыС:

    • 🚫 Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π° всС поля подряд β€” Β«ΠΏΡ€ΠΎ запас» ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ индСксы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ:
      • Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Π·Ρ‹ Π² 2–3 Ρ€Π°Π·Π°.
      • Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи (вставка/ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅).
    • πŸ”„ Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ порядка ΠΏΠΎΠ»Π΅ΠΉ Π² составных индСксах β€” индСкс (ПолС1, ПолС2) Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ запросу, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ПолС2.
    • πŸ—‘οΈ НСудалСниС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… индСксов β€” со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π² Π±Π°Π·Π΅ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ индСксы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ запись.
    • πŸ” Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ с Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»Π΅ ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ (Π³Π΄Π΅ 99% записСй ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π›ΠΎΠΆΡŒ) Π½Π΅ стоит ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

    Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° распространённая ошибка β€” индСксация вычисляСмых ΠΏΠΎΠ»Π΅ΠΉ. НапримСр, Ссли Π²Ρ‹ создадитС индСкс ΠΏΠΎ полю, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ рассчитываСтся ΠΊΠ°ΠΊ Π¦Π΅Π½Π° * ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ, Π‘Π£Π‘Π” Π½Π΅ смоТСт Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля Π½Π΅ хранится Π² Π±Π°Π·Π΅, Π° вычисляСтся Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ».

    Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ индСкс?

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

    SELECT * FROM sys.dm_db_index_usage_stats
    

    WHERE database_id = DB_ID('Π˜ΠΌΡΠ’Π°ΡˆΠ΅ΠΉΠ‘Π°Π·Ρ‹')

    AND object_id = OBJECT_ID('Π˜ΠΌΡΠ’Π°Π±Π»ΠΈΡ†Ρ‹');

    Если Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ… user_seeks, user_scans стоят Π½ΡƒΠ»ΠΈ β€” индСкс Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

    Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.22+ измСнился Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ автоматичСской ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ запросов. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ старыС инструкции ΠΏΠΎ индСксации (Π΄ΠΎ 2023 Π³ΠΎΠ΄Π°), Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ индСксов Π½Π° тСстовой ΠΊΠΎΠΏΠΈΠΈ Π±Π°Π·Ρ‹.

    6. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ индСксов: ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

    Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ индСксы β€” это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° Π΄Π΅Π»Π°. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ½ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ (Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° части), Ρ‡Ρ‚ΠΎ сниТаСт ΠΈΡ… ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. РСгулярноС обслуТиваниС индСксов Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

    • πŸ”„ ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ индСксов β€” восстанавливаСт ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ структуру. Π’ SQL Server:
      ALTER INDEX ALL ON [dbo].[Document_Sale] REBUILD;
    • 🧹 ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° статистики β€” обновляСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ распрСдСлСнии Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…:
      EXEC sp_updatestats;
    • πŸ—‘οΈ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… индСксов β€” ΠΊΠ°ΠΊ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ индСксы, ΠΌΡ‹ рассказали Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.
    • πŸ“Š ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Performance Monitor (Π² Windows) ΠΈΠ»ΠΈ pg_stat_activity (Π² PostgreSQL).

    Для 1Π‘ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ оптимизация сводится ΠΊ:

    • РСгулярному Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π±Π°Π·Ρ‹ (АдминистрированиС β†’ ВСстированиС ΠΈ исправлСниС).
    • Π”Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ chdbfl.exe).

    РСкомСндуСмая частота обслуТивания:

    Π’ΠΈΠΏ Π±Π°Π·Ρ‹ ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ индСксов ОбновлСниС статистики ВСстированиС ΠΈ исправлСниС
    SQL Server Π Π°Π· Π² мСсяц (ΠΈΠ»ΠΈ Ρ‡Π°Ρ‰Π΅ ΠΏΡ€ΠΈ высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅) Π Π°Π· Π² нСдСлю Π Π°Π· Π² ΠΊΠ²Π°Ρ€Ρ‚Π°Π»
    PostgreSQL Π Π°Π· Π² 2 мСсяца Π Π°Π· Π² нСдСлю Π Π°Π· Π² ΠΊΠ²Π°Ρ€Ρ‚Π°Π»
    Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ НС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ НС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Π Π°Π· Π² мСсяц
    πŸ’‘

    РСгулярноС обслуТиваниС индСксов Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ настройка. Π‘Π΅Π· пСрСстроСния ΠΈ обновлСния статистики Π΄Π°ΠΆΠ΅ идСально спроСктированныС индСксы со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡŽΡ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

    7. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (1Π‘:Fresh, 1Π‘:Π“ISPRU)

    Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ 1Π‘:Fresh ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ сСрвисы (1Π‘:Π“ISPRU, 1Π‘:Π›ΠΈΠ½ΠΊ), возмоТности Ρ€ΡƒΡ‡Π½ΠΎΠΉ настройки индСксов ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв:

    • πŸ”§ АдминистрированиС Π‘Π£Π‘Π” Π»Π΅ΠΆΠΈΡ‚ Π½Π° сторонС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°.
    • πŸ“Š Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.
    • ⚠️ НСкоторыС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы Π½Π° созданиС индСксов Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ (Π½ΠΎ это платная услуга).
    • Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ:

      1. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ запросы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Плана выполнСния.
      2. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄ запросов:
        • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π›Π•Π’ΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π• вмСсто ΠŸΠžΠ›ΠΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π•, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
        • Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ конструкций Π²ΠΈΠ΄Π° Π“Π”Π• ΠŸΠžΠ”Π‘Π’Π ΠžΠšΠ(ПолС, 1, 3) = "АБВ" β€” ΠΎΠ½ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ использованиС индСксов.
    • ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ сСрвиса с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСксы.
    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

    Π’ 1Π‘:Fresh Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, массовоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ справочников) ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ систСмой, Ссли ΠΎΠ½ΠΈ Π²Π΅Π΄ΡƒΡ‚ ΠΊ высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½Π° сСрвСр. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ пСрСнСсти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π° Π½ΠΎΡ‡Π½ΠΎΠ΅ врСмя.

    8. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: индСксы для Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ

    Рассмотрим нСсколько Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… кСйсов, Π³Π΄Π΅ индСксация Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ускоряСт Ρ€Π°Π±ΠΎΡ‚Ρƒ.

    8.1. УскорСниС ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² Π² Β«1Π‘:БухгалтСрия 3.0Β»

    ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Β«ΠžΠ±ΠΎΡ€ΠΎΡ‚Π½ΠΎ-сальдовая Π²Π΅Π΄ΠΎΠΌΠΎΡΡ‚ΡŒΒ» гСнСрируСтся Π±ΠΎΠ»Π΅Π΅ 5 ΠΌΠΈΠ½ΡƒΡ‚.

    РСшСниС:

    • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΏΠΎ полям (Π‘Ρ‡Π΅Ρ‚, ΠŸΠ΅Ρ€ΠΈΠΎΠ΄, ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ) Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ AccumulationRegister_Balance.
    • Для SQL Server:
      CREATE INDEX IX_Balance_AccountPeriodOrg
      

      ON [dbo].[AccumulationRegister_Balance] (Account, Period, Organization);

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: врСмя Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π΄ΠΎ 20 сСкунд.

    8.2. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π² Β«1Π‘:Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»Π΅ΠΉ 11Β»

    ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: мСдлСнная ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² «РСализация Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² ΠΈ услуг» (Π±ΠΎΠ»Π΅Π΅ 1 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚).

    РСшСниС:

    • ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ выполнСния ΠΈ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Document_Sale.
    • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ составной индСкс ΠΏΠΎ полям (DocKind, DocDate, Organization).

    8.3. УскорСниС поиска Π² справочниках Β«1Π‘:Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π° ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрсоналом»

    ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: поиск ΠΏΠΎ справочнику Β«Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠΈΒ» Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 10+ сСкунд.

    РСшСниС:

    • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ индСкс ΠΏΠΎ полю Π’Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉΠΠΎΠΌΠ΅Ρ€ (Ссли поиск ΠΈΠ΄Ρ‘Ρ‚ ΠΏΠΎ Π½Π΅ΠΌΡƒ).
    • Π’ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅: Π² ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ Π’Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉΠΠΎΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ индСксируСмоС.
    ΠŸΠΎΡ‡Π΅ΠΌΡƒ индСкс ΠΏΠΎ полю "НаимСнованиС" Π½Π΅ всСгда ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚?

    ПолС НаимСнованиС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² условии ΠŸΠžΠ”ΠžΠ‘ΠΠž (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π“Π”Π• НаимСнованиС ΠŸΠžΠ”ΠžΠ‘ΠΠž "Иван%"). Π’Π°ΠΊΠΈΠ΅ запросы Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ стандартныС индСксы. Для Π½ΠΈΡ… Π½ΡƒΠΆΠ½Ρ‹ полнотСкстовыС индСксы ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Ρ€ΠΎΠ΄Π΅ trigram-индСксов Π² PostgreSQL.

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

    ❓ МоТно Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс Π² 1Π‘ Π±Π΅Π· доступа ΠΊ SQL-сСрвСру?

    Π’ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ β€” Π΄Π°, Ρ‡Π΅Ρ€Π΅Π· ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€ (ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠ² ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΊ индСксируСмоС). Π’ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π±Π΅Π· доступа ΠΊ Π‘Π£Π‘Π” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ:

    • ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ администратору сСрвСра.
    • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ использовали ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ индСксы.
    ❓ ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС создания индСкса запрос стал Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅?

    Π­Ρ‚ΠΎ типичная ситуация, которая Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

    • Π‘Π£Π‘Π” Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»Π° статистику ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡƒ индСксу (Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ UPDATE STATISTICS).
    • ИндСкс ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠ·ΠΊΡƒΡŽ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ полю с двумя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ значСниями).
    • Запрос ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π΄ ΠΏΠΎΠ»Π΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π“Π”Π• Π“ΠžΠ”(Π”Π°Ρ‚Π°) = 2026), Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ индСкса.

    ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠ»Π°Π½ выполнСния запроса β€” Ссли Π‘Π£Π‘Π” Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ индСкс, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅Π³ΠΎ стоит ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

    ❓ Как ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² Π±Π°Π·Π΅?

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

    SELECT
    

    t.name AS TableName,

    i.name AS IndexName,

    c.name AS ColumnName

    FROM

    sys.indexes i

    INNER JOIN

    sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id

    INNER JOIN

    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id

    INNER JOIN

    sys.tables t ON i.object_id = t.object_id

    WHERE

    i.type_desc = 'NONCLUSTERED'

    ORDER BY

    t.name, i.name, ic.key_ordinal;

    Π’ PostgreSQL:

    SELECT
    

    tablename,

    indexname,

    indexdef

    FROM

    pg_indexes

    WHERE

    schemaname = 'public'

    ORDER BY

    tablename, indexname;

    ❓ НуТно Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля Ρ‚ΠΈΠΏΠ° Β«Π‘ΡƒΠ»Π΅Π²ΠΎΒ»?

    Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅Ρ‚. Поля с двумя значСниями (Π˜ΡΡ‚ΠΈΠ½Π°/Π›ΠΎΠΆΡŒ) ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ Π½ΠΈΠ·ΠΊΡƒΡŽ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΈ индСкс ΠΏΠΎ Π½ΠΈΠΌ Π½Π΅ принСсёт Π²Ρ‹Π³ΠΎΠ΄Ρ‹, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΏΡ€ΠΈ записи. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ β€” Ссли ΠΏΠΎΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π“Π”Π• ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх запросах ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΎΡ‡Π΅Π½ΡŒ большая (ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ записСй).

    ❓ МоТно Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² 1Π‘?

    НСт, Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (созданныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π’Π’ Π² запросС) ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° врСмя выполнСния запроса ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ индСксов. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

    • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запрос Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†.
    • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ постоянныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ созданными индСксами.