Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ тысячи запросов β€” ΠΎΡ‚ простых Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ справочников Π΄ΠΎ слоТных ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² с мноТСством joins. Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° структура хранСния Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π΄Π΅ΡΡŒ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят индСксы β€” ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ слуТСбныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ поиск ΠΈ сортировку записСй, Π½ΠΎ ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании ΠΌΠΎΠ³ΡƒΡ‚, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ систСму.

Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с «зависаниСм» 1Π‘ ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ открытия Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° часто кроСтся ΠΈΠΌΠ΅Π½Π½ΠΎ Π² отсутствии ΠΈΠ»ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΊΠ΅ индСксов. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ:

  • πŸ” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ индСксы ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° физичСском ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
  • ⚑ КакиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚, Π° Π² ΠΊΠ°ΠΊΠΈΡ… случаях индСксы бСсполСзны
  • ⚠️ Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ создании индСксов ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ
  • πŸ› οΈ ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ для администраторов ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ индСксы Π² 1Π‘ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ устроСны

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

ЀизичСски индСксы Π² 1Π‘ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π‘Π£Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Microsoft SQL Server ΠΈΠ»ΠΈ PostgreSQL). Когда Π²Ρ‹ создаётС индСкс для поля справочника ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, систСма Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π³Π΄Π΅ хранятся:

  • πŸ“Œ ЗначСния индСксируСмого поля (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Ρ€Ρ‚ΠΈΠΊΡƒΠ»Ρ‹ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°Ρ‚Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²)
  • πŸ”— Бсылки Π½Π° физичСскиС записи Π² основной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹)
  • πŸ“Š Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ слуТСбная информация для быстрого поиска (Π΄Π΅Ρ€Π΅Π²ΡŒΡ поиска, Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹)

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ индСксы Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, Π° лишь Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡ… Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ для поиска Π²ΠΈΠ΄Π΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ:

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ индСкс ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ замСдляСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ INSERT, UPDATE, DELETE, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π‘Π£Π‘Π” Π΄ΠΎΠ»ΠΆΠ½Π° синхронно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΈ всС связанныС индСксы.

Π’ 1Π‘ индСксы Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²:

  1. АвтоматичСскиС β€” ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ для ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»Π΅ Бсылка Π² справочниках).
  2. Π ΡƒΡ‡Π½Ρ‹Π΅ β€” Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ для часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Артикул Π² Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Π΅ ΠΈΠ»ΠΈ Π”Π°Ρ‚Π° Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…).
πŸ“Š Как часто Π²Ρ‹ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ индСксы Π² своСй Π±Π°Π·Π΅ 1Π‘?
Никогда Π½Π΅ задумывался
Волько ΠΏΡ€ΠΈ явных Ρ‚ΠΎΡ€ΠΌΠΎΠ·Π°Ρ…
РСгулярно ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽ
НС знаю, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅

КакиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ индСксы (Π° ΠΊΠ°ΠΊΠΈΠ΅ β€” Π½Π΅Ρ‚)

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ «ускоритСлСм» для всСх запросов. Π˜Ρ… ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, Π³Π΄Π΅ индСксы Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚, Π° Π³Π΄Π΅ ΠΈΡ… созданиС бСсполСзно ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π²Ρ€Π΅Π΄Π½ΠΎ.

Π’ΠΈΠΏ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ УскоряСтся Π»ΠΈ с индСксом? ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· 1Π‘
Поиск ΠΏΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ совпадСнию (=) βœ… Π”Π° (Π² 10–100 Ρ€Π°Π·) Π“Π”Π• НомСнклатура.Артикул = "ABC123"
Поиск ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ (Π‘ΠžΠ›Π¬Π¨Π•, ΠœΠ•ΠΠ¬Π¨Π•) βœ… Π”Π° (особСнно для Π΄Π°Ρ‚ ΠΈ чисСл) Π“Π”Π• Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π”Π°Ρ‚Π° ΠœΠ•Π–Π”Π£ &ΠΠ°Ρ‡Π°Π»ΠΎΠ˜ &ΠšΠΎΠ½Π΅Ρ†
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° (Π£ΠŸΠžΠ Π―Π”ΠžΠ§Π˜Π’Π¬ ПО) βœ… Π”Π° (ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†) Π£ΠŸΠžΠ Π―Π”ΠžΠ§Π˜Π’Π¬ ПО ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚.НаимСнованиС
Поиск ΠΏΠΎ подстрокС (ΠŸΠžΠ”ΠžΠ‘ΠΠž, Π‘ΠžΠ”Π•Π Π–Π˜Π’) ❌ НСт (Ссли подстрока Π½Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅) Π“Π”Π• НомСнклатура.НаимСнованиС ΠŸΠžΠ”ΠžΠ‘ΠΠž "%Π±ΠΎΠ»Ρ‚%"
АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (БУММА, ΠšΠžΠ›Π˜Π§Π•Π‘Π’Π’Πž) ⚠️ Частично (зависит ΠΎΡ‚ Π‘Π£Π‘Π”) БУММА(Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.Π‘ΡƒΠΌΠΌΠ°Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°)

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚: индСкс ускоряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΏΠΎΠ»Π΅ участвуСт Π² условии ΠΎΡ‚Π±ΠΎΡ€Π° ΠΈΠ»ΠΈ сортировки. НапримСр, индСкс ΠΏΠΎ полю НомСнклатура.Π¦Π΅Π½Π° Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π² запросС:

ВЫБРАВЬ

НомСнклатура.НаимСнованиС,

НомСнклатура.Π¦Π΅Π½Π°

Π˜Π—

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура КАК НомСнклатура

Π“Π”Π•

НомСнклатура.ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ = &ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ

Π—Π΄Π΅ΡΡŒ индСкс Π½ΡƒΠΆΠ΅Π½ ΠΏΠΎ полю ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ, Π° Π½Π΅ ΠΏΠΎ Π¦Π΅Π½Π°.

πŸ’‘

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

Когда индСксы тормозят систСму: 5 опасных сцСнариСв

МногиС администраторы ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Β«Ρ‡Π΅ΠΌ большС индСксов β€” Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅Β». Π­Ρ‚ΠΎ опасноС Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅. Π˜Π·Π±Ρ‹Ρ‚ΠΎΠΊ индСксов ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ:

  • 🐒 Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΡŽ записСй (каТдая вставка/ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пСрСстроСния всСх индСксов).
  • πŸ’Ύ Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Π·Ρ‹ (индСксы Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π΄ΠΎ 30–50% ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…).
  • πŸ”„ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½Π° сСрвСр ΠΏΡ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ случаи, ΠΊΠΎΠ³Π΄Π° индСксы ΡƒΡ…ΡƒΠ΄ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

  1. Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π° полях с Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ

    Π‘Π΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ β€” это ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΠ»Π΅. НапримСр, индСкс ΠΏΠΎ полю НомСнклатура.Π•Π΄ΠΈΠ½ΠΈΡ†Π°Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΡ (Π³Π΄Π΅ 90% записСй ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«ΡˆΡ‚.Β») бСсполСзСн: Π‘Π£Π‘Π” ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€ΠΎΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ индСкс.

  2. Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π° часто обновляСмых полях

    Если ΠΏΠΎΠ»Π΅ мСняСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.ΠŸΠΎΠΌΠ΅Ρ‚ΠΊΠ°Π£Π΄Π°Π»Π΅Π½ΠΈΡ), индСкс ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ постоянным Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ ΠΈ замСдлСнию Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

  3. Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ составныС индСксы

    Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ индСкса ΠΏΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ (ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚, Π”Π°Ρ‚Π°, Π‘ΡƒΠΌΠΌΠ°) ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π²Ρ‹ часто ΠΈΡ‰Π΅Ρ‚Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ этой Ρ‚Ρ€ΠΎΠΉΠΊΠ΅. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях это пустая Ρ‚Ρ€Π°Ρ‚Π° рСсурсов.

  4. Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π° вычисляСмых полях

    Π’ 1Π‘ нСльзя Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ поля (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ = ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ - Π Π΅Π·Π΅Ρ€Π²). ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это Ρ‡Π΅Ρ€Π΅Π· Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прСдставлСния часто приводят ΠΊ ошибкам синхронизации.

  5. ΠΠ΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ индСксы

    Π‘Π£Π‘Π” Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ рСсурсы Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ индСксов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ запросС. Π’ SQL Server это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· систСмноС прСдставлСниС sys.dm_db_index_usage_stats.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ Π±Π°Π·Π°Ρ… с высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π½Π° запись (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»Π΅ с тысячами Ρ‡Π΅ΠΊΠΎΠ² Π² час) ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ индСксы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ (deadlocks), ΠΊΠΎΠ³Π΄Π° Π΄Π²Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΆΠ΄ΡƒΡ‚ освобоТдСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ индСкса.
Как Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ индСксы Π² SQL Server?

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

SELECT

OBJECT_NAME(i.OBJECT_ID) AS Π’Π°Π±Π»ΠΈΡ†Π°,

i.name AS ИндСкс,

i.type_desc AS Π’ΠΈΠΏ,

s.user_seeks + s.user_scans + s.user_lookups AS Использований

FROM

sys.indexes i

LEFT JOIN

sys.dm_db_index_usage_stats s ON i.OBJECT_ID = s.OBJECT_ID AND i.index_id = s.index_id

WHERE

OBJECTPROPERTY(i.OBJECT_ID, 'IsUserTable') = 1

AND s.database_id = DB_ID()

AND s.user_seeks + s.user_scans + s.user_lookups = 0

ORDER BY

Π’Π°Π±Π»ΠΈΡ†Π°, ИндСкс;

Π­Ρ‚ΠΎΡ‚ запрос ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ индСксы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ использовались с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСднСго рСстарта сСрвСра. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ смСло ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΠ²ΡˆΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ для ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ).

Как ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСксы Π² 1Π‘: пошаговая инструкция

ΠŸΡ€ΠΎΡ†Π΅ΡΡ добавлСния индСксов Π² 1Π‘ зависит ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π‘Π£Π‘Π”. Рассмотрим ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Π½Π° SQL Server ΠΈΠ»ΠΈ PostgreSQL.

πŸ“‹ ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ запросы Ρ‡Π΅Ρ€Π΅Π· План запроса Π² 1Π‘

πŸ“Š ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ поля (количСство ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ)

πŸ”§ Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ Π½Π΅ обновляСтся слишком часто

πŸ“‰ ΠžΡ†Π΅Π½ΠΈΡ‚ΡŒ влияниС Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи (Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΏΠΈΠΈ Π±Π°Π·Ρ‹!)

-->

Π¨Π°Π³ 1. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ Β«ΡƒΠ·ΠΊΠΈΡ… мСст»

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ встроСнныС инструмСнты 1Π‘:

  • πŸ”Ž Π–ΡƒΡ€Π½Π°Π» рСгистрации (Ρ€Π°Π·Π΄Π΅Π» АдминистрированиС β†’ Π–ΡƒΡ€Π½Π°Π» рСгистрации) β€” ΠΈΡ‰ΠΈΡ‚Π΅ Π΄ΠΎΠ»Π³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.
  • πŸ“ˆ ВСстированиС ΠΈ исправлСниС (АдминистрированиС β†’ ВСстированиС ΠΈ исправлСниС) β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ индСксов.
  • πŸ› οΈ План выполнСния запроса (Π² консоли запросов Π½Π°ΠΆΠΌΠΈΡ‚Π΅ F9 ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ «План»).

Шаг 2. БозданиС индСкса

Π’ 1Π‘ индСксы Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€, Π»ΠΈΠ±ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π‘Π£Π‘Π”. НапримСр, для SQL Server:

-- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ простого индСкса

CREATE INDEX IX_НомСнклатура_Артикул ON dbo._Reference163 (Артикул);

-- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ составного индСкса

CREATE INDEX IX_Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚_Π”Π°Ρ‚Π°_ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ ON dbo._Document123 (Π”Π°Ρ‚Π°, ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚);

Π¨Π°Π³ 3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° эффСктивности

ПослС добавлСния индСкса:

  1. ЗапуститС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ запрос Π·Π°Π½ΠΎΠ²ΠΎ ΠΈ сравнитС врСмя выполнСния.
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠ»Π°Π½ выполнСния β€” ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ индСкс (ΠΈΡ‰ΠΈΡ‚Π΅ Index Seek вмСсто Table Scan).
  3. ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° запись: Ссли ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ INSERT/UPDATE замСдлились Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° 20%, индСкс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ структуры ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π°) всС Ρ€ΡƒΡ‡Π½Ρ‹Π΅ индСксы Π½Π° этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ автоматичСски ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. ПослС обновлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΡ… придётся Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ!

БоставныС индСксы: ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Боставной индСкс β€” это индСкс, построСнный ΠΏΠΎ нСскольким полям Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Он ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ часто выполняСтС запросы с условиями ΠΏΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ. НапримСр, Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… РСализацияВоваровУслуг Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ запрос ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ВЫБРАВЬ

*

Π˜Π—

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.РСализацияВоваровУслуг КАК РСализация

Π“Π”Π•

РСализация.Π”Π°Ρ‚Π° ΠœΠ•Π–Π”Π£ &ΠΠ°Ρ‡Π°Π»ΠΎΠ˜ &ΠšΠΎΠ½Π΅Ρ†

И РСализация.ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ = &ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚

Π’ этом случаС ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ составной индСкс ΠΏΠΎ полям (Π”Π°Ρ‚Π°, ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚). Однако здСсь Π΅ΡΡ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹:

  • πŸ”’ ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ Π²Π°ΠΆΠ΅Π½! ИндСкс (Π”Π°Ρ‚Π°, ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚) ускорит поиск ΠΏΠΎ Π΄Π°Ρ‚Π΅ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Ρƒ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ поискС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚Ρƒ. Для этого Π½ΡƒΠΆΠ΅Π½ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ индСкс ΠΏΠΎ ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚.
  • πŸ“ ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° количСство ΠΏΠΎΠ»Π΅ΠΉ. Π’ SQL Server составной индСкс ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄ΠΎ 16 ΠΏΠΎΠ»Π΅ΠΉ, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ эффСктивны индСксы с 2–4 полями.
  • πŸ”„ Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. Если Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ индСксы ΠΏΠΎ Π”Π°Ρ‚Π° ΠΈ ΠšΠΎΠ½Ρ‚Ρ€Π°Π³Π΅Π½Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, составной индСкс ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования:

Π’ Π±Π°Π·Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° часто выполняСтся запрос ΠΏΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌ:

  • ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Ρ‚ΠΎΠ²Π°Ρ€Π°
  • Π‘Ρ€Π΅Π½Π΄
  • НаличиС Π½Π° складС

Π’ этом случаС составной индСкс (ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ, Π‘Ρ€Π΅Π½Π΄, НаличиС) ускорит Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли:

  1. Поля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСстС Π² условии Π“Π”Π•.
  2. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ Π² индСксС совпадаСт с порядком Π² запросС (слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ).
  3. Π‘Π΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ высока (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ всС Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈ Π±Ρ€Π΅Π½Π΄Ρƒ).
πŸ’‘

БоставныС индСксы эффСктивны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ. НС создавайтС ΠΈΡ… Β«Π½Π° всякий случай» β€” ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π² индСксС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ замСдляСт обновлСния.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… индСксов: дСфрагмСнтация ΠΈ пСрСстроСниС

Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ индСксы Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ β€” ΠΈΡ… структура становится Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ·-Π·Π° частых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ:

  • 🐌 Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΡŽ чтСния (Π‘Π£Π‘Π” приходится Β«ΠΏΡ€Ρ‹Π³Π°Ρ‚ΡŒΒ» ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ частям диска).
  • πŸ’₯ Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Π·Ρ‹ (Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ индСксы Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ большС мСста).

Π’ SQL Server ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ запросом:

SELECT

OBJECT_NAME(ind.OBJECT_ID) AS Π’Π°Π±Π»ΠΈΡ†Π°,

ind.name AS ИндСкс,

indexstats.avg_fragmentation_in_percent AS ЀрагмСнтация_ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ²

FROM

sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') indexstats

INNER JOIN

sys.indexes ind ON ind.OBJECT_ID = indexstats.OBJECT_ID AND ind.index_id = indexstats.index_id

WHERE

indexstats.avg_fragmentation_in_percent > 10 -- ЀрагмСнтация Π±ΠΎΠ»Π΅Π΅ 10%

ORDER BY

indexstats.avg_fragmentation_in_percent DESC;

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ:

  1. ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ индСкса (REBUILD) β€” ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ созданиС Π·Π°Π½ΠΎΠ²ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для индСксов с Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ > 30%:
    ALTER INDEX IX_НомСнклатура_Артикул ON dbo._Reference163 REBUILD;
  2. РСорганизация (REORGANIZE) β€” «мягкая» оптимизация Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ 10–30%:
    ALTER INDEX IX_Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚_Π”Π°Ρ‚Π° ON dbo._Document123 REORGANIZE;

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ индСксов:

  • πŸ“… ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ пСрСстроСниС индСксов Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ минимальной Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (Π½ΠΎΡ‡ΡŒΡŽ ΠΈΠ»ΠΈ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅).
  • πŸ”„ Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π· (>100 Π“Π‘) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ REBUILD WITH (ONLINE = ON), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.
  • πŸ“Š ПослС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·Ρ‹ β€” ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒΡΡ Π½Π° 5–20%.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ 1Π‘ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ (Π½Π΅ SQL) индСксы ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ автоматичСски ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ, ΠΈ ручная оптимизация Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°. ВсС совСты этого Ρ€Π°Π·Π΄Π΅Π»Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрному Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с индСксами ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

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

Ошибка ΠŸΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡ Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ
Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π° всСх полях Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ записСй Π² 5–10 Ρ€Π°Π·, рост Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Π·Ρ‹ Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ индСксы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² Π“Π”Π• ΠΈΠ»ΠΈ Π£ΠŸΠžΠ Π―Π”ΠžΠ§Π˜Π’Π¬ ПО
Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ статистики Π‘Π£Π‘Π” ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ нСэффСктивныС ΠΏΠ»Π°Π½Ρ‹ запросов РСгулярно обновляйтС статистику: EXEC sp_updatestats;
Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π° полях с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ВСкст ΠΈΠ»ΠΈ Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅Π”Π°Π½Π½Ρ‹Π΅ Ошибки ΠΏΡ€ΠΈ записи, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Π·Ρ‹ Для полнотСкстового поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ FULLTEXT-индСксы (Π² SQL Server)
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ индСксов Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… НСнуТная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° tempdb Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ нСобходимости
ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° НакоплСниС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… индСксов Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ sys.dm_db_index_usage_stats для Π°ΡƒΠ΄ΠΈΡ‚Π°

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

Π’ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±Π°Π· 1Π‘:ERP послС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ появились Ρ‚ΠΎΡ€ΠΌΠΎΠ·Π° ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π·Π°ΠΊΠ°Π·ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Анализ ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ:

  1. На Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π±Ρ‹Π»ΠΎ создано 12 индСксов (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅).
  2. Один ΠΈΠ· индСксов Π±Ρ‹Π» ΠΏΠΎ полю ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ (Ρ‚ΠΈΠΏ Π‘Ρ‚Ρ€ΠΎΠΊΠ°(2000)), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ использовалось Π² запросах.
  3. Π‘Π£Π‘Π” Ρ‚Ρ€Π°Ρ‚ΠΈΠ»Π° Π΄ΠΎ 40% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ этих индСксов ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ.

РСшСниС: ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ 7 ΠΈΠ· 12 индСксов, оставив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ критичСски Π²Π°ΠΆΠ½Ρ‹Π΅. ВрСмя провСдСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ с 8 Π΄ΠΎ 1,5 сСкунд.

BEGIN TRANSACTION;

DROP INDEX IX_ВСстовый ON dbo._Document123;

-- ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

-- Если всё Ρ…ΠΎΡ€ΠΎΡˆΠΎ:

COMMIT TRANSACTION;

-- Если Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

ROLLBACK TRANSACTION;

-->

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

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

ВСхничСски Π² SQL Server ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ β€” 999 индСксов Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΡƒΠΆΠ΅ послС 10–15 индСксов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ записСй Ρ€Π΅Π·ΠΊΠΎ ΠΏΠ°Π΄Π°Π΅Ρ‚. ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ количСство β€” 3–7 индСксов Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π² зависимости ΠΎΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

❓ ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС добавлСния индСкса запрос стал Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅?

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  1. Π‘Π£Π‘Π” Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»Π° статистику (Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ UPDATE STATISTICS).
  2. ИндСкс ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠ·ΠΊΡƒΡŽ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ полю с 2–3 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями).
  3. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±Ρ€Π°Π» Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· SET SHOWPLAN_TEXT ON).
  4. НакладныС расходы Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ индСкса прСвысили Π²Ρ‹Π³ΠΎΠ΄Ρƒ ΠΎΡ‚ Π΅Π³ΠΎ использования.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠ»Π°Π½ выполнСния запроса β€” Ссли вмСсто Index Seek ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Index Scan, индСкс нСэффСктивСн.

❓ НуТно Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поля, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ часто выполняСтся DISTINCT?

Π”Π°, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. НапримСр, индСкс ΠΏΠΎ полю НомСнклатура.ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ ускорит запрос:

ВЫБРАВЬ Π ΠΠ—Π›Π˜Π§ΠΠ«Π•

НомСнклатура.ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ

Π˜Π—

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ.НомСнклатура КАК НомСнклатура;

Однако Ссли Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ всСго 5–10 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, индСкс Π½Π΅ даст сущСствСнного прироста скорости.

❓ Как индСксы Π²Π»ΠΈΡΡŽΡ‚ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…?

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ измСнСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎ всСх индСксах. Π­Ρ‚ΠΎ особСнно ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для:

  • РаспрСдСлённых ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π±Π°Π· (Π Π˜Π‘) Π² 1Π‘.
  • ОбмСнов Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (EnterpriseData).
  • ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΎΠ² с Always On Availability Groups (Π² SQL Server).

РСкомСндация: Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΡƒΠ·Π»Π°Ρ… оставляйтС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ минимально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ индСксы.

❓ МоТно Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, рСгистрС накоплСния)?

НСт, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² 1Π‘ Π½Π΅ хранят Π΄Π°Π½Π½Ρ‹Π΅ физичСски β€” ΠΎΠ½ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запроса. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

  1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ индСксы Π½Π° физичСских Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π² основС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ рСгистра).
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прСдставлСния (Π² PostgreSQL) ΠΈΠ»ΠΈ индСксированныС Π²ΡŒΡŽΡ…ΠΈ (Π² SQL Server) для часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для рСгистра накоплСния ВоварыНаБкладах:

-- Π’ SQL Server

CREATE INDEX IX_РСгистр_НомСнклатура_Π‘ΠΊΠ»Π°Π΄

ON dbo._AccumRg123 (НомСнклатура, Π‘ΠΊΠ»Π°Π΄)

WHERE ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ BETWEEN '2023-01-01' AND '2023-12-31';