ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql

ВсС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ индСксы MS SQL

ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π€ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ знания ΠΎΠ± индСксах Π² MS SQL Server. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ прСдставлСниС ΠΎ Π½ΠΈΡ…, прСимущСствах использования, структурС. Π£Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСксы, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ. ВсС самоС ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ индСксы Π² sql server

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

Π‘Π»ΠΎΠ²Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ составлСнной ΠΊΠ½ΠΈΠ³Π΅, индСкс ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстро ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ строкам Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… запросу. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΡ… использованиС позволяСт ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ запроса.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для получСния всСх страниц Π² ΠΊΠ½ΠΈΠ³Π΅, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, сначала Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅Ρ‡Π½ΡŽ Ρ‚Π΅ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ страницы. Для этого слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΏΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅. На Π΅Π΅ основС ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ссылки Π½Π° страницы ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ значСния, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, sql server Π½Π°ΠΉΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ индСкс ΠΈ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ быстро Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ всС строки с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Если Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСкс, Ρ‚ΠΎ для поиска ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ сканированиС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ врСмя поиска.

Благодаря индСксу процСсс поиска Π΄Π°Π½Π½Ρ‹Ρ… сокращаСтся Π·Π° счСт ΠΈΡ… упорядочивания ΠΊΠ°ΠΊ физичСского, Ρ‚Π°ΠΊ ΠΈ логичСского. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ выглядит ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ ссылок Π½Π° Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ упорядочСны ΠΏΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ столбцу Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Π°ΠΊΠΎΠΉ столбСц называСтся индСксированным. Π˜Π½Π΄Π΅ΠΊΡΡ‹ находятся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ ΠΏΠΎ сути Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ систСмы sql-сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ стандартный индСкс ΠΌΠΎΠΆΠ½ΠΎ Π½Π° всСх столбцах Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΡ€ΠΎΠΌΠ΅:

Об индСксах ΠΈ ΠΊΡƒΡ‡Π°Ρ…

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° создана ΠΈ Π² Π½Π΅ΠΉ Π΅Ρ‰Π΅ Π½Π΅Ρ‚ индСксов, ΠΎΠ½Π° выглядит ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… (Heap). Π’ Π½Π΅ΠΉ всС записи хранятся Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½ΠΎ, Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ порядка. ΠŸΠΎΡ‚ΠΎΠΌΡƒ ΠΈΡ… ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«ΠΊΡƒΡ‡Π°ΠΌΠΈΒ».

Если Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, sql server просканируСт Π΅Π΅ (Table scan). Пока Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹ индСксы, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ограничСния (UNIQUE CONSTRAINT, UNIQUE INDEX ΠΈΠ»ΠΈ PRIMARY KEY), сСрвСр ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ всС Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ записи (с ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π΄ΠΎ послСднСй) ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ условиям поиска.

Π­Ρ‚ΠΎ дСмонстрируСт Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ indexes:

Но Π½Π΅ всСгда индСкс ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ поиск ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Для Ρ‚Π°Π±Π»ΠΈΡ† Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ эффСктивнСС Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ индСксам.

Indexes ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈ нСдостатки:

Но соврСмСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… создания ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ эффСкт для Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½ΠΎ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°

ВсС индСксы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ структуру (structure). Они состоят ΠΈΠ·:

ВсС ΠΎΠ½ΠΈ хранятся Π² Π²ΠΈΠ΄Π΅ сбалансированных B-Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² (B-tree). Начало Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° располоТСно Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΡƒΠ·Π»Π΅ (находящимся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ) ΠΈ ΠΏΠΎ сути являСтся Β«Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π΄Π²Π΅Ρ€ΡŒΡŽΒ». Π­Ρ‚ΠΎΡ‚ ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ страницу, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТатся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

Π’ Π½ΠΈΠΆΠ½Π΅ΠΉ части ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ располоТСны Π»ΠΈΡΡ‚ΡŒΡ Π΄Π΅Ρ€Π΅Π²Π° (ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ). Π”Π»ΠΈΠ½Ρ‹ Π²Π΅Ρ‚ΠΎΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹.

Π’ Ρ‚Π°ΠΊΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ сбалансирована каТдая Π²Π΅Ρ‚ΠΊΠ°. Благодаря Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ ΠΏΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ… измСнСниях Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ снова становится сбалансированным.

ΠŸΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ запроса ΠΊ индСксированному столбцу подсистСма Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ процСсс поиска с Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ·Π»Π° ΠΊ Π½ΠΈΠΆΠ½ΠΈΠΌ, проходя ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ обрабатывая ΠΈΡ…. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ располагаСтся всС Π±ΠΎΠ»Π΅Π΅ развСрнутая информация ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ достигаСтся Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π»ΠΈΡΡ‚ΡŒΠ΅Π² (leaf level) поиск прСкращаСтся, Ρ‚.ΠΊ. подсистСма запросов Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ΠΈΠΏΡ‹ индСксов

Π’ Microsoft SQL Server ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ индСксы: кластСрныС ΠΈ нСкластСрныС. Рассмотрим ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

ΠšΠ»Π°ΡΡ‚Π΅Ρ€Π½Ρ‹ΠΉ индСкс

Основная Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° β€” сохранСниС Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅, отсортированном ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π°. Π’Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присущ лишь СдинствСнный кластСризованный индСкс (Clustered index), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌ порядкС – Π»ΠΈΠ±ΠΎ возрастания, Π»ΠΈΠ±ΠΎ убывания. По возмоТности, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Clustered index.

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ отсортированными лишь Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠΌΠ΅Π΅Ρ‚ кластСризованный индСкс. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Clustered index Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² уровнях Π»ΠΈΡΡ‚ΡŒΠ΅Π².

Если Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅Ρ‚ Clustered index, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ формирования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ PRIMARY KEY ΠΈ UNIQUE, ΠΎΠ½ формируСтся автоматичСски. Когда для Ρ‚Π°Π±Π»ΠΈΡ†/ ΠΊΡƒΡ‡ созданы Nonclustered indexes, Ρ‚ΠΎ Π² процСссС создания Clustered index всС нСкластСризованныС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ пСрСстроСны.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π»ΠΈΡΡ‚ΡŒΠ΅Π² зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, индСкс кластСрный ΠΈΠ»ΠΈ нСкластСрный. Они ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ссылки, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° строки с Π½ΠΈΠΌΠΈ.

НСкластСрный индСкс

НСкластСризованными (Nonclustered) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ индСксы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат:

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

Он ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°:

Nonclustered indexes ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ столбцами (included column). А Π·Π½Π°Ρ‡ΠΈΡ‚, Π»ΠΈΡΡ‚ΡŒΡ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ значСния индСксированных ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… нСиндСксированных столбцов. Π­Ρ‚ΠΎ свойство Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ограничСния, Π²ΠΎΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π½Π° индСкс. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ нСиндСксируСмыС столбцы Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ограничСния Π½Π° Π΄Π»ΠΈΠ½Ρƒ индСкса.

Π“Π»Π°Π²Π½Ρ‹Π΅ свойства Nonclustered indexes:

Nonclustered indexes ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° Π»ΡŽΠ±Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, Π² Ρ‚ΠΎΠΌ числС ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… кластСрный индСкс.

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ индСксов

БущСствуСт большоС число ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… индСксов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ кластСрными, Ρ‚Π°ΠΊ ΠΈ нСкластСрными. Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ….

Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΡ‹ΠΉ

Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΡ‹ΠΌ (Filtered) индСксом Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Nonclustered index, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ задСйствован ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° для индСксации части строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π’Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ спроСктированный Filtered index способСн:

Боставной

Боставным Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ:

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ индСксы, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ составных, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ лишь ΠΏΠΎ СдинствСнному столбцу.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ составных индСксов цСлСсообразно, ΠΊΠΎΠ³Π΄Π°:

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник. Он сформирован ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ, Ρ‚.ΠΊ. ΠΌΠ½ΠΎΠ³ΠΎ людСй ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ, ΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π² процСссС сортировки ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌ, описываСмым Π² CREATE INDEX. ΠŸΠΎΡ‚ΠΎΠΌΡƒ, Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ индСкс Π±Ρ‹Π» задСйствован ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, сам запрос ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠΉ.

ИспользованиС составных индСксов ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ для выполнСния поиска Π΄Π°Π½Π½Ρ‹Ρ… сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ число индСксов.

Query Optimizer ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ… Π² зависимости ΠΎΡ‚ структуры запроса.

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ (Unique) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ индСкс, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСх строк ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ»ΡŽΡ‡Π΅ индСкса Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ…, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ. Для составного ΠΊΠ»ΡŽΡ‡Π° понятиС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ касаСтся всСх index columns, Π½ΠΎ Π½Π΅ распространяСтся Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ столбСц Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Если Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ формируСтся Unique index ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ряду столбцов, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ каТдая вариация Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠ»ΡŽΡ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ.

SQL сСрвСром создаСтся автоматичСски Unique index для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцов ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ UNIQUE Π»ΠΈΠ±ΠΎ PRIMARY KEY. Но ΠΎΠ½ формируСтся лишь ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ условия отсутствия Π΄ΡƒΠ±Π»Π΅ΠΉ Π² ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцах Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс создаСтся Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ столбца:

ΠšΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½Ρ‹ΠΉ

ΠšΠΎΠ»ΠΎΠ½ΠΎΡ‡Π½Ρ‹ΠΌ (Columnstore) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ индСкс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² столбцах. ИспользованиС Columnstore indexes Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ цСлСсообразно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, Ρ‚.ΠΊ. ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚:

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΌ (Spatial) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ индСкса, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ столбцы с пространствСнными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (прСдставлСнныС Π² Ρ‚ΠΈΠΏΠ°Ρ… Geography ΠΈΠ»ΠΈ Geometry). Spatial index позволяСт Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ запросов ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ пространствСнных столбцов ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½ΠΈΡ….

ОсновноС условиС создания пространствСнного индСкса – Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ PRIMARY KEY для Ρ‚Π°Π±Π»ΠΈΡ†.

ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉ

ΠŸΠΎΠ»Π½ΠΎΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹Π΅ (Full-text) индСксы ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности поиска ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… слов Π² строках, Π³Π΄Π΅ Π΄Π°Π½Π½Ρ‹Π΅ прСдставлСны Π² символах.

ДСйствия ΠΏΠΎ созданию ΠΈ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ Full-text indexes Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «заполнСниями». Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ заполнСния:

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ (Covering) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ индСкс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ запрос ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ объСмС с Π»ΠΈΡΡ‚ΡŒΠ΅Π² индСкса, Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ записям Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. А Π·Π½Π°Ρ‡ΠΈΡ‚, Π² Covering index хранится достаточный объСм Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° запрос. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Π½Π΅Ρ‚ нСобходимости ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π΅Π· использования Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы быстрСС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…. Однако, ΠΎΠ½ΠΈ становятся достаточно большими, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ Π½Π΅ стоит.

XML-индСкс

XML – спСцифичСский Ρ‚ΠΈΠΏ индСкса, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² столбцах Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, прСдставлСнными Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Он Π΄Π΅Π»Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ эффСктивной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ поисковых запросов ΠΊ Π½ΠΈΠΌ.

Π˜Π½Π΄Π΅ΠΊΡΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…

Активно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ индСксы для Ρ‚Π°Π±Π»ΠΈΡ† Π΄Π°Π½Π½Ρ‹Ρ…:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ индСксов Π² ms sql server

Польза индСксов ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΡ€Π°ΠΉΠ½Π΅ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ. Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ способны ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° Π½Π΅ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ – ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ΡŒ.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ достаточно ΠΌΠ½ΠΎΠ³ΠΎ дискового мСста, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… большС, Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ строк, автоматичСски ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈ индСксы. Π­Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ увСличСния рСсурсов ΠΈ Π³Ρ€ΠΎΠ·ΠΈΡ‚ΡŒ сниТСниСм ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ряд Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊΠ°ΠΊ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ ΠΊ запросам Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊ Π½ΠΈΠΌ.

Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Как сказано Π²Ρ‹ΡˆΠ΅, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ зависит ΠΎΡ‚ индСксов. ΠŸΡ€ΠΈ поступлСнии запроса ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅, обСспСчивая быстрый поиск Π΄Π°Π½Π½Ρ‹Ρ… Π»ΠΈΠ±ΠΎ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ, Ρ‚.ΠΊ. ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΎΠ½ΠΈ, Π΄Π°Π±Ρ‹ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ дСйствия, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. И Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ происходит с Π½ΠΈΠΌΠΈ – Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.

ΠŸΠΎΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ»Π°Π½Π° стратСгии ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ совСтов спСциалистов:

Запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ являСтся ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΡƒΡ‡Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. НСобходимо ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ частоту измСнСния Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ трСбуСтся соблюдСниС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ²:

Бпособы создания индСксов

ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ созданиС индСксов ms sql server с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… инструмСнтов. Π’ этом ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚:

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ кластСризованный индСкс

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, созданиС кластСризованного индСкса sql сСрвСром происходит автоматичСски, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ столбСц выбираСтся Π² качСствС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° (PRIMARY KEY). Когда Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ происходит, слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ кластСрный индСкс своими Ρ€ΡƒΠΊΠ°ΠΌΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Clustered index Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Management Studio. Для этого слСдуСт:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ дСйствий станСт кластСрный индСкс.

Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкций Transact-SQL CREATRE INDEX.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСкластСризованный индСкс

Для создания Nonclustered index ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Management Studio Π»ΠΈΠ±ΠΎ инструкциями T-SQL.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Nonclustered index с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ столбцами

КоснСмся вопроса, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Nonclustered index с условиСм, Ρ‡Ρ‚ΠΎ Π² индСкс Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ столбцы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ. Π’Π°ΠΊΠΎΠΉ индСкс принято ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° индСкс создаСтся ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ запрос. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ индСксом покрывался запрос ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚.Π΅. Π²ΠΊΠ»ΡŽΡ‡Π°Π» всС столбцы. ВслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ запрос ΠΏΠΎΠΊΡ€Ρ‹Ρ‚, увСличиваСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС значСния столбцов Π² индСксС Π±Π΅Π· обращСния ΠΊ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ числа ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° дискС.

Однако стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π² индСкс Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцов Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΅Π³ΠΎ увСличиваСтся. А Π·Π½Π°Ρ‡ΠΈΡ‚, для Π΅Π³ΠΎ хранСния понадобится большС дискового пространства. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ INSERT, UPDATE, DELETE ΠΈ MERGE Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Для Π΅Π³ΠΎ создания Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Management Studio:

ΠŸΡ€ΠΈ нСобходимости, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΡ‹ΠΉ Nonclustered index. Для этого слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ T-SQL ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ CREATE NONCLUSTERED INDEX Π² WHERE ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ условиС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ практичСски Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Π² запросах.

УдалСниС индСкса

ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠΌΠΈ способами ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ индСксы. Для Π½Π°Ρ‡Π°Π»Π° Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Management Studio. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ индСксов выполняСтся ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкций T-SQL DROP INDEX (DROP INDEX IX_NonClustered ON TestTable). Однако Сю нСльзя Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для удалСния Ρ‚Π΅Ρ… индСксов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ создавались Ρ‡Π΅Ρ€Π΅Π· Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ PRIMARY KEY ΠΈ UNIQUE. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡ…, слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструкциСй ALTER TABLE с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ DROP CONSTRAINT.

Как Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ коэффициСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ установлСн ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Π§Ρ‚ΠΎΠ±Ρ‹ внСсти измСнСния Π² значСния коэффициСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ установлСны ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ:

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ индСксов ΠΈ условий прСдлоТСния WHERE

Если ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ WHERE инструкции SELECT содСрТит условиС поиска Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΠ΄Π½ΠΈΠΌ столбцом, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс. Π­Ρ‚ΠΎ условиС ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ высокой сСлСктивности (selectivity) условия.

Но ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСсполСзным ΠΏΡ€ΠΈ постоянном ΡƒΡ€ΠΎΠ²Π½Π΅ сСлСктивности ΠΎΡ‚ 80% ΠΈ Π²Ρ‹ΡˆΠ΅. ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Если Π² часто примСняСмом запросС условиС поиска Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ AND, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ всСго – ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ составной индСкс, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π² Π½Π΅Π³ΠΎ сразу всС Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ столбцы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈΡΡŒ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ WHERE инструкции SELECT.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ индСксов

ПослС выполнСния Π»ΡŽΠ±Ρ‹Ρ… дСйствий с Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ sql сСрвСром Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚ производятся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΊΠΈ Π² индСксах. Бпустя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя всС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ исправлСния ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ ΠΏΠΎ всСй Π±Π°Π·Π΅.

Подобная фрагмСнтация Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ пониТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. К ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ опСрациям ΠΏΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ индСксов относят Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ пСрСстроСниС индСксов.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ трСбуСтся провСсти – Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ пСрСстроСниС, слСдуСт Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Она ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ способ Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивным ΠΈ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ систСмной Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ sys.dm_db_index_physical_stats. Для опрСдСлСния уровня Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ всСго пСрСчня Ρ‚Π°Π±Π»ΠΈΡ† для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ запросом:

SELECT OBJECT_NAME(T1.object_id) AS NameTable,

T1.index_id AS IndexId,

T2.name AS IndexName,

T1.avg_fragmentation_in_percent AS Fragmentation

FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS T1

LEFT JOIN sys.indexes AS T2 ON T1.object_id = T2.object_id AND T1.index_id = T2.index_id

Богласно рСкомСндациям Microsoft, ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ уровня Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

РСорганизация индСкса

Π Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ процСсс устранСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса. Π’ Π΅Π³ΠΎ Ρ…ΠΎΠ΄Π΅ происходит дСфрагмСнтация ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ уровня кластСрных ΠΈ нСкластСрных индСксов ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΈ прСдставлСниям. Говоря простым языком – выполняСтся простоС пСрСупорядочиваниС страниц. Π’ основС пСрСупорядочивания Π»Π΅ΠΆΠΈΡ‚ логичСский порядок ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² (выполняСтС слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ).

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ провСсти Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ – Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ:

ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ индСкса

ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ΠΌ называСтся опСрация ΠΏΠΎ ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса. Он Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² устранСнии старого ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ.

ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ индСкс выполняСтся нСсколькими способами. Π’ этом ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚:

Π­Ρ‚ΠΎ вся полСзная информация ΠΏΠΎ индСксам Π² Microsoft SQL Server. Π˜Π·ΡƒΡ‡Π°ΠΉΡ‚Π΅ ΠΈΡ…, Π° Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ вопросы – Π·Π°Π΄Π°Π²Π°ΠΉΡ‚Π΅. Π£Π΄Π°Ρ‡ΠΈ Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ indexes ms sql.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запроса

ИспользованиС ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… индСксов

НС всСгда Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ использовании нСкластСризованных индСксов SQL Server Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ этапС ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π» всю строку. Π­Ρ‚Π° ситуация Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° нСкластСризованный индСкс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ SQL Server для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Когда это происходит, ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ индСкс ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ этот индСкс ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ вСсь запрос. ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы ΠΌΠΎΠ³ΡƒΡ‚ сущСствСнно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запроса; Π² этом Π»Π΅Π³ΠΊΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Π²ΡƒΡ… ΠΏΠ»Π°Π½Π°Ρ… запросов ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π’ Ρ‚Π°ΠΊΠΈΡ… запросах ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ строки Π΄Π°Π½Π½Ρ‹Ρ…, составляСт 97% всСй стоимости запроса. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, запрос Π±Π΅Π· этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π² 32 Ρ€Π°Π·Π° быстрСС. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы

На рисункС, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅, Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ сСрвСру SQL Server для выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ запроса Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ кластСризованному индСксу, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ индСкс ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ запрос, Ссли столбСц CarrierTrackingNumber Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ доступ ΠΊ кластСризованному индСксу для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎ стоит, Π²Ρ‚ΠΎΡ€ΠΎΠΉ запрос составляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1% ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅ΠΉ стоимости ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Π² Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Messages (БообщСния), ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ,. Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΡŒ запрос, SQL Server Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 2 считывания страницы (вмСсто 709 считываний, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запроса).

ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π€ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql

Π’Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ большой Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² скорости выполнСния. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ столбцы ΠΈΠ· запроса, Ссли ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅. Но ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ слСдуСт ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ столбцы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ вСроятным ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ индСкса. НС слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² инструкции SELECT символ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΈ (*) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΏΡ€ΠΎΡ‰Π΅ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ запрос.

Взглянув Π½Π° ΠΏΠ»Π°Π½ выполнСния, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ доступ ΠΊ кластСризованному индСксу большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½. На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ сообщСний Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ для выполнСния этого запроса Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 5 считываний страниц, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ 709.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π² вычисляСмых столбцах

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π˜Π½Π΄Π΅ΠΊΡΡ‹

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ индСксы ΠΈ ΠΈΡ… Ρ€ΠΎΠ»ΡŒ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния запросов. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ индСксов ΠΈ способы ΠΈΡ… хранСния. Π”Π°Π»Π΅Π΅ ΠΈΡΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ основныС инструкции языка Transact-SQL, примСняСмыС для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с индСксами: CREATE INDEX, ALTER INDEX ΠΈ DROP INDEX. ΠŸΠΎΡ‚ΠΎΠΌ рассматриваСтся фрагмСнтация индСксов Π΅Π΅ влияния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы. ПослС этого даСтся нСсколько ΠΎΠ±Ρ‰ΠΈΡ… Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΏΠΎ созданию индСксов ΠΈ описываСтся нСсколько ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² индСксов.

ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния

БистСмы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ индСксы для обСспСчСния быстрого доступа ΠΊ рСляционным Π΄Π°Π½Π½Ρ‹ΠΌ. ИндСкс прСдставляСт собой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…, которая позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ быстрый доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСскольким строкам Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ настройка индСксов являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ аспСктом ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов.

ИндСкс Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ сходСн с индСксом (Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ) ΠΊΠ½ΠΈΠ³ΠΈ. Когда Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ быстро Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Ρ‚Π΅ΠΌΡƒ Π² ΠΊΠ½ΠΈΠ³Π΅, ΠΌΡ‹ сначала смотрим Π² индСксС, Π½Π° ΠΊΠ°ΠΊΠΈΡ… страницах ΠΊΠ½ΠΈΠ³ΠΈ эта Ρ‚Π΅ΠΌΠ° рассматриваСтся, Π° ΠΏΠΎΡ‚ΠΎΠΌ сразу ΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π½ΡƒΠΆΠ½ΡƒΡŽ страницу. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ поискС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine обращаСтся ΠΊ индСксу, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΅Π΅ физичСскоС мСстонахоТдСниС.

Но ΠΌΠ΅ΠΆΠ΄Ρƒ индСксом ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ индСксом Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ сущСствСнныС Ρ€Π°Π·Π½ΠΈΡ†Ρ‹:

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

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

Если для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ отсутствуСт подходящий индСкс, для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ строк систСма ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ сканирования Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ систСма ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈ исслСдуСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π΄ΠΎ послСднСй), ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ строку Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€, Ссли для Π½Π΅Π΅ удовлСтворяСтся условиС поиска Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ WHERE. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС строки ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ Π² соотвСтствии с ΠΈΡ… физичСским располоТСниСм Π² памяти. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠ΅Π½Π΅Π΅ эффСктивСн, Ρ‡Π΅ΠΌ доступ с использованиСм индСксов, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π΄Π°Π»Π΅Π΅.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… структурах Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ страницами индСксов. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ индСксируСмой строки имССтся элСмСнт индСкса (index entry), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сохраняСтся Π½Π° страницС индСксов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт индСкса состоит ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π° индСкса ΠΈ указатСля. Π’ΠΎΡ‚ поэтому элСмСнт индСкса Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅, Ρ‡Π΅ΠΌ строка Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ количСство элСмСнтов индСкса Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницС индСксов Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ количСство строк Π² страницС Π΄Π°Π½Π½Ρ‹Ρ….

Π­Ρ‚ΠΎ свойство индСксов ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ страницам индСксов, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС, Ρ‡Π΅ΠΌ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… для ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ страницам Π΄Π°Π½Π½Ρ‹Ρ…. Π˜Π½Ρ‹ΠΌΠΈ словами, для сканирования Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, скорСй всСго, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ‡Π΅ΠΌ для сканирования индСкса этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Database Engine ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ структуру Π΄Π°Π½Π½Ρ‹Ρ… сбалансированного Π΄Π΅Ρ€Π΅Π²Π° B+. B+-Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всС самыС Π½ΠΈΠΆΠ½ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ находятся Π½Π° расстоянии ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ количСства ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΎΡ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ (ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°) Π΄Π΅Ρ€Π΅Π²Π°. Π­Ρ‚ΠΎ свойство поддСрТиваСтся Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² индСксированный столбСц Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅.

На рисункС Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° структура B+-Π΄Π΅Ρ€Π΅Π²Π° для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Employee ΠΈ прямой доступ ΠΊ строкС Π² этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 25348 для столбца Id. (ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° Employee проиндСксирована ΠΏΠΎ столбцу Id.) На этом рисункС ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ B+-Π΄Π΅Ρ€Π΅Π²ΠΎ состоит ΠΈΠ· ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, ΡƒΠ·Π»ΠΎΠ² Π΄Π΅Ρ€Π΅Π²Π° ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ², количСство ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ нуля ΠΈ большС:

ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π€ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql

Поиск Π² этом Π΄Π΅Ρ€Π΅Π²Π΅ значСния 25348 ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Начиная с корня Π΄Π΅Ρ€Π΅Π²Π°, выполняСтся поиск наимСньшСго значСния ΠΊΠ»ΡŽΡ‡Π°, большСго ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΡƒΠ·Π»Π΅ Ρ‚Π°ΠΊΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ 29346, поэтому дСлаСтся ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π», связанный с этим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π’ этом ΡƒΠ·Π»Π΅ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ трСбованиям ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 28559, вслСдствиС Ρ‡Π΅Π³ΠΎ выполняСтся ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΡƒΠ·Π΅Π» Π΄Π΅Ρ€Π΅Π²Π°, связанный с этим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎΡ‚ ΡƒΠ·Π΅Π» ΠΈ содСрТит искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 25348. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ индСкс, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π΅Π³ΠΎ строку ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. (ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ эквивалСнтным ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ поиск мСньшСго ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎΠ³ΠΎ значСния индСкса.)

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

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΌΡ‹ рассмотрим Π΄Π²Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠ° индСксов, кластСризованныС ΠΈ нСкластСризованныС, Π° Ρ‚Π°ΠΊΠΆΠ΅ научимся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСксы.

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ индСксы

опрСдСляСт физичСский порядок Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ лишь ΠΎΠ΄ΠΈΠ½ кластСризованный индСкс, Ρ‚.ΠΊ. строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ нСльзя ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ физичСски Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΈΠΌ способом. Поиск с использованиСм кластСризованного индСкса выполняСтся ΠΎΡ‚ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° B+-Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊ ΡƒΠ·Π»Π°ΠΌ Π΄Π΅Ρ€Π΅Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π² Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ связанный список (doubly linked list), Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ страниц (page chain).

Π’Π°ΠΆΠ½Ρ‹ΠΌ свойством кластСризованного индСкса являСтся Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΡƒΠ·Π»Ρ‹ Π΄Π΅Ρ€Π΅Π²Π° содСрТат страницы Π΄Π°Π½Π½Ρ‹Ρ…. (Π£Π·Π»Ρ‹ кластСризованного индСкса всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ содСрТат страницы индСкса.) Π’Π°Π±Π»ΠΈΡ†Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ кластСризованный индСкс (явно ΠΈΠ»ΠΈ нСявно), называСтся кластСризованной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° B+-Π΄Π΅Ρ€Π΅Π²Π° кластСризованного индСкса ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° рисункС Π½ΠΈΠΆΠ΅:

ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π€ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ индСкс создаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ограничСния ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. ΠšΡ€ΠΎΠΌΠ΅ этого, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ кластСризованный индСкс ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚.Π΅. Π² столбцС, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ кластСризованный индСкс, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Если кластСризованный индСкс создаСтся для столбца, содСрТащСго ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ значСния, систСма Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ обСспСчиваСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ, добавляя Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊ строкам, содСрТащим Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ индСксы ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ быстрый доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° запрос осущСствляСт поиск Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

НСкластСризованныС индСксы

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° нСкластСризованного индСкса Ρ‚ΠΎΡ‡Π½ΠΎ такая ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ кластСризованного, Π½ΠΎ с двумя Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ отличиями:

нСкластСризованный индСкс Π½Π΅ измСняСт физичСскоС упорядочиваниС строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹;

страницы ΡƒΠ·Π»ΠΎΠ² нСкластСризованного индСкса состоят ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅ΠΉ индСкса ΠΈ Π·Π°ΠΊΠ»Π°Π΄ΠΎΠΊ.

Если для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ нСкластСризованных индСксов, физичСский порядок строк этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ нСкластСризованного индСкса ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine создаСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡƒΡŽ структуру, которая сохраняСтся Π² индСксных страницах. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° B+-Π΄Π΅Ρ€Π΅Π²Π° нСкластСризованного индСкса ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° рисункС Π½ΠΈΠΆΠ΅:

ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql. Π€ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс ms sql

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, поиск Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм нСкластСризованного индСкса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ двумя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° довольно Π²Π΅Π»ΠΈΠΊΠΎ, поэтому слСдуСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ нСкластСризованного индСкса с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π΅ΡΡ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ использованиС сущСствСнно повысит ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π―Π·Ρ‹ΠΊ Transact-SQL ΠΈ индСксы

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ познакомились с физичСской структурой индСксов, Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ рассмотрим, ΠΊΠ°ΠΊ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСксов ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± индСксах. ВсС это ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ нас ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ использования индСксов для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ систСмы.

БозданиС индСксов

ИндСкс для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции CREATE INDEX. Π­Ρ‚Π° инструкция ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ index_name Π·Π°Π΄Π°Π΅Ρ‚ имя создаваСмого индСкса. ИндСкс ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ большС столбцов ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ table_name. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ создаСтся индСкс, указываСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ column1. Числовой суффикс этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ индСкс ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… столбцов Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ созданиС индСксов для прСдставлСний.

МоТно ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любой столбСц Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ столбцы, содСрТащиС значСния Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… VARBINARY(max), BIGINT ΠΈ SQL_VARIANT, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ индСксированы.

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

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ CLUSTERED Π·Π°Π΄Π°Π΅Ρ‚ кластСризованный индСкс, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ NONCLUSTERED (примСняСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ индСкс Π½Π΅ измСняСт порядок строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ максимум 249 нСкластСризованных индСксов.

ВозмоТности ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Database Engine Π±Ρ‹Π»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹, позволяя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ индСксов с ΡƒΠ±Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ порядком Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбцов. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ASC послС ΠΈΠΌΠ΅Π½ΠΈ столбца ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ индСкс создаСтся с Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΌ порядком Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбца, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DESC ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΠ±Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ порядок Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбца индСкса. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² использовании индСкса прСдоставляСтся большая Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. Π‘ ΡƒΠ±Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ порядком слСдуСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ составныС индСксы Π½Π° столбцах, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… упорядочСны Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Ρ… направлСниях.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ INCLUDE позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ столбцы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊ страницам ΡƒΠ·Π»ΠΎΠ² нСкластСризованного индСкса. ИмСна столбцов Π² спискС INCLUDE Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ, ΠΈ столбСц нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΈ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ-настоящСму ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° INCLUDE, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ собой прСдставляСт ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс (covering index). Если всС столбцы запроса Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² индСкс, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚.ΠΊ. ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСстонахоТдСниС всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбцов ΠΏΠΎ страницам индСкса, Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Вакая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ называСтся ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ индСксом ΠΈΠ»ΠΈ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ запросом. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² страницы ΡƒΠ·Π»ΠΎΠ² нСкластСризованного индСкса Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… столбцов ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ большС ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… запросов, ΠΏΡ€ΠΈ этом ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π°.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ FILLFACTOR Π·Π°Π΄Π°Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы индСкса Π²ΠΎ врСмя Π΅Π³ΠΎ создания. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° FILLFACTOR ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 1 Π΄ΠΎ 100. ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ n=100 каТдая страница индСкса заполняСтся Π½Π° 100%, Ρ‚.Π΅. ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ страница ΡƒΠ·Π»Π° Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ страница, Π½Π΅ относящаяся ΠΊ ΡƒΠ·Π»Ρƒ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свободного мСста для вставки Π½ΠΎΠ²Ρ‹Ρ… строк. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСкомСндуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для статичСских Ρ‚Π°Π±Π»ΠΈΡ†. (Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, n=0, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ страницы ΡƒΠ·Π»ΠΎΠ² индСкса Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π° каТдая ΠΈΠ· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… страниц содСрТит свободноС мСсто для ΠΎΠ΄Π½ΠΎΠΉ записи.)

ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° FILLFACTOR ΠΌΠ΅ΠΆΠ΄Ρƒ 1 ΠΈ 99 страницы ΡƒΠ·Π»ΠΎΠ² создаваСмой структуры индСкса Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ свободноС мСсто. Π§Π΅ΠΌ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n, Ρ‚Π΅ΠΌ мСньшС свободного мСста Π² страницах ΡƒΠ·Π»ΠΎΠ² индСкса. НапримСр, ΠΏΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ n=60 каТдая страница ΡƒΠ·Π»ΠΎΠ² индСкса Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ 40% свободного мСста для вставки строк индСкса Π² дальнСйшСм. (Π‘Ρ‚Ρ€ΠΎΠΊΠΈ индСкса Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ посрСдством инструкции INSERT ΠΈΠ»ΠΈ UPDATE.) Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n=60 Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ для Ρ‚Π°Π±Π»ΠΈΡ†, Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ довольно частым измСнСниям. ΠŸΡ€ΠΈ значСниях ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° FILLFACTOR ΠΌΠ΅ΠΆΠ΄Ρƒ 1 ΠΈ 99 ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ страницы индСкса содСрТат свободноС мСсто для ΠΎΠ΄Π½ΠΎΠΉ записи каТдая.

ПослС создания индСкса Π² процСссС Π΅Π³ΠΎ использования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ FILLFACTOR Π½Π΅ поддСрТиваСтся. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΎΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ объСм Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ мСста с ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ для свободного мСста. Для восстановлСния исходного значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° FILLFACTOR примСняСтся инструкция ALTER INDEX.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ PAD_INDEX тСсно связан с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ FILLFACTOR. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ FILLFACTOR Π² основном Π·Π°Π΄Π°Π΅Ρ‚ объСм свободного пространства Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ объСма страниц ΡƒΠ·Π»ΠΎΠ² индСкса. А ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ PAD_INDEX ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° FILLFACTOR примСняСтся ΠΊΠ°ΠΊ ΠΊ страницам индСкса, Ρ‚Π°ΠΊ ΠΈ ΠΊ страницам Π΄Π°Π½Π½Ρ‹Ρ… Π² индСксС.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DROP_EXISTING позволяСт ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ воспроизвСдСнии кластСризованного индСкса для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, которая Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСкластСризованный индСкс. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ смотритС Π΄Π°Π»Π΅Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «ΠŸΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ индСкса».

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SORT_IN_TEMPDB примСняСтся для помСщСния Π² ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… tempdb Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сортировки, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΈ создании индСкса. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ссли Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… tempdb Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ дискС, Ρ‡Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ IGNORE_DUP_KEY Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ систСмС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ вставки ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² индСксированныС столбцы. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ прСкращСния выполнСния Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° инструкция INSERT вставляСт Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… Π² индСксированный столбСц. Если этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ инструкции INSERT Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ строки, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ индСкса, систСма Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… вмСсто Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния всСй инструкции просто Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Π½Π΅ вставляСт строки с Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Π°ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π°, Π° просто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΈ добавляСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ строки. Если ΠΆΠ΅ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ установлСн, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСй инструкции Π±ΡƒΠ΄Π΅Ρ‚ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ.

Когда ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ALLOW_ROW_LOCKS Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ (ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ on), систСма примСняСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ строк. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ALLOW_PAGE_LOCKS, систСма примСняСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ страниц ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ доступС. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ STATISTICS_NORECOMPUTE опрСдСляСт состояниС автоматичСского пСрСрасчСта статистики ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ индСкса.

Активированный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ONLINE позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ индСкс Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ позволяСт Π² процСссС измСнСния индСкса ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ основной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ кластСризованного индСкса ΠΈ Π»ΡŽΠ±Ρ‹Ρ… связанных индСксов. НапримСр, Π² процСссС пСрСсоздания кластСризованного индСкса ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ запросы ΠΏΠΎ этим Π΄Π°Π½Π½Ρ‹ΠΌ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ON создаСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ индСкс ΠΈΠ»ΠΈ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ default), ΠΈΠ»ΠΈ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ file_group).

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ созданиС нСкластСризованного индСкса для столбца Id Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Employee:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ составного индСкса ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ значСния Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ столбцС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΈ создании индСкса заполняСтся 80% пространства ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы ΡƒΠ·Π»ΠΎΠ² индСкса.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ индСкса для столбца Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ссли этот столбСц содСрТит ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ значСния. Π’Π°ΠΊΠΎΠΉ индСкс ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ лишь Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL) встрСчаСтся Π² столбцС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. ΠšΡ€ΠΎΠΌΠ΅ этого, любая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² столбСц, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Π° систСмой Π² случаС дублирования значСния.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° индСкса ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒΡΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, вслСдствиС Ρ‡Π΅Π³ΠΎ процСсс хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² страницах индСкса станСт нСэффСктивным. БущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса: внутрСнняя фрагмСнтация ΠΈ внСшняя фрагмСнтация. ВнутрСнняя фрагмСнтация опрСдСляСт объСм Π΄Π°Π½Π½Ρ‹Ρ…, хранящихся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницС, Π° внСшняя фрагмСнтация Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ логичСского порядка страниц.

Для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса примСняСтся динамичСскоС административноС прСдставлСниС DMV, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ sys.dm_db_index_physical_stats. Π­Ρ‚ΠΎ DMV Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± объСмС ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ индСксов ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ страницы. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы возвращаСтся ΠΎΠ΄Π½Π° строка для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ уровня B+-Π΄Π΅Ρ€Π΅Π²Π°. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого DMV ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ стСпСни Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ строк Π² страницах Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ нСобходимости Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ИспользованиС прСдставлСния sys.dm_db_index_physical_stats ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅. (ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ индСксы Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Works_on. Для удалСния индСксов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ инструкция DROP INDEX, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.)

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, прСдставлСниС sys.dm_db_index_physical_stats ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ индСкса соотвСтствСнно. Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π·Π°Π΄Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ€Π°Π·Π΄Π΅Π»Π°, Π° послСдний опрСдСляСт ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сканирования, примСняСмый для получСния статистичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. (Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ посрСдством значСния NULL.)

НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΠΈΠ· столбцов этого прСдставлСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ столбцы avg_fragmentation_in_percent ΠΈ avg_page_space_used_in_percent. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ указываСтся срСдний ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ опрСдСляСтся объСм занятого пространства Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ….

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ индСкса

ПослС ознакомлСния с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ индСкса, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ рассмотрСно Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, эту ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ индСкса ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… систСмных срСдств:

прСдставлСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° sys.indexes;

прСдставлСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° sys.index_columns;

систСмной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ sp_helpindex;

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ свойств objectproperty;

срСды управлСния Management Studio сСрвСра SQL Server;

динамичСского административного прСдставлСния DMV sys.dm_db_index_usage_stats;

динамичСского административного прСдставлСния DMV sys.dm_db_missing_index_details.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° sys.indexes содСрТит строку для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ индСкса ΠΈ строку для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π΅Π· кластСризованного индСкса. НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ столбцами этого прСдставлСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ столбцы object_id, name ΠΈ index_id. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† object_id содСрТит имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ индСкс, Π° столбцы name ΠΈ index_id содСрТат имя ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ этого индСкса соотвСтствСнно.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° sys.index_columns содСрТит строку для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ столбца, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ индСкса ΠΈΠ»ΠΈ ΠΊΡƒΡ‡ΠΈ. Π­Ρ‚Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ совмСстно с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ посрСдством прСдставлСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° sys.indexes, для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… свСдСний ΠΎ свойствах ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ индСкса.

БистСмная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° sp_helpindex Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± индСксах Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‚Π°Ρ‚ΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для столбцов. Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Π—Π΄Π΅ΡΡŒ пСрСмСнная @db_object прСдставляСт имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ индСксам, функция свойств objectproperty ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° свойства: IsIndexed ΠΈ IsIndexable. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ свойство прСдоставляСт свСдСния ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ индСкса Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ прСдставлСния, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, поддаСтся Π»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ прСдставлСниС ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

Для рСдактирования ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ индСкса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСды SQL Server Management Studio Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΏΠΊΠ΅ Databases, Ρ€Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΡƒΠ·Π΅Π» Tables, Π² этом ΡƒΠ·Π»Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ Π΅Π΅ ΠΏΠ°ΠΏΠΊΡƒ Indexes. Π’ ΠΏΠ°ΠΏΠΊΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Indexes отобразится список всСх ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… индСксов для Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π”Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΌΡ‹ΡˆΡŒΡŽ ΠΏΠΎ индСксу ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Index Properties со свойствами этого индСкса. (Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ индСкс ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСды Management Studio.)

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ sys.dm_db_index_usage_stats Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ подсчСт Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с индСксами ΠΈ врСмя послСднСго выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. КаТдая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ опСрация поиска, просмотра ΠΈΠ»ΠΈ обновлСния ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу ΠΏΡ€ΠΈ исполнСнии ΠΎΠ΄Π½ΠΎΠ³ΠΎ запроса считаСтся использованиСм индСкса ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ счСтчика Π² этом DMV. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ частотС использования индСкса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° Π΅Π΅ основС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ индСксы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ большС, Π° ΠΊΠ°ΠΊΠΈΠ΅ мСньшС.

ИзмСнСниС индСксов

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΡ… систСм Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ALTER INDEX. Π­Ρ‚Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ индСкса. Бинтаксис инструкции ALTER INDEX ΠΎΡ‡Π΅Π½ΡŒ сходСн с синтаксисом инструкции CREATE INDEX. Π˜Π½Ρ‹ΠΌΠΈ словами, эта инструкция позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY ΠΈ STATISTICS_NORECOMPUTE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ описаны Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈ рассмотрСнии инструкции CREATE INDEX.

ΠšΡ€ΠΎΠΌΠ΅ Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², инструкция ALTER INDEX ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ REBUILD, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для пСрСсоздания индСкса;

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ REORGANIZE, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ страниц ΡƒΠ·Π»ΠΎΠ² индСкса;

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DISABLE, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ индСкса. Π­Ρ‚ΠΈ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….

ΠŸΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ индСкса

ΠŸΡ€ΠΈ любом ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ инструкции INSERT, UPDATE ΠΈΠ»ΠΈ DELETE, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° фрагмСнтация Π΄Π°Π½Π½Ρ‹Ρ…. Если эти Π΄Π°Π½Π½Ρ‹Π΅ проиндСксированы, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° фрагмСнтация индСкса, ΠΊΠΎΠ³Π΄Π° информация индСкса оказываСтся разбросанной ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ физичСским страницам. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… индСкса ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΆΠ°Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ систСмы. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС трСбуСтся ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ (REBUILD) всС Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ индСксы.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ двумя способами:

посрСдством ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° REBUILD инструкции ALTER INDEX;

посрСдством ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° DROP_EXISTING инструкции CREATE INDEX.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ REBUILD примСняСтся для пСрСсоздания индСксов. Если для этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° вмСсто ΠΈΠΌΠ΅Π½ΠΈ индСкса ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ALL, Π±ΡƒΠ΄ΡƒΡ‚ вновь созданы всС индСксы Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. (Π Π°Π·Ρ€Π΅ΡˆΠΈΠ² динамичСскоС пСрСсозданиС индСксов, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… Π·Π°Π½ΠΎΠ²ΠΎ.)

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DROP_EXISTING инструкции CREATE INDEX позволяСт ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ пСрСсоздании кластСризованного индСкса Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, которая Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСкластСризованныС индСксы. Он ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ кластСризованный ΠΈΠ»ΠΈ нСкластСризованный индСкс Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ индСкс. Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ нСкластСризованный индСкс Π² кластСризованной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ содСрТит Π² своих ΡƒΠ·Π»Π°Ρ… Π΄Π΅Ρ€Π΅Π²Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния кластСризованного индСкса Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ кластСризованного индСкса Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ вновь всС Π΅Π΅ нСкластСризованныС индСксы. ИспользованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° DROP_EXISTING позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ пСрСсоздания нСкластСризованных индСксов.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DROP_EXISTING Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ, Ρ‡Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ REBUILD, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ прСдоставляСт нСсколько ΠΎΠΏΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ столбцов, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… индСкс, ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ нСкластСризованного индСкса Π² кластСризованный.

РСорганизация страниц ΡƒΠ·Π»ΠΎΠ² индСкса

ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ индСкса

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DISABLE ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ индСкс. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ индСкс нСдоступСн для примСнСния, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ снова Π²ΠΊΠ»ΡŽΡ‡Π΅Π½. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ индСкс Π½Π΅ измСняСтся ΠΏΡ€ΠΈ внСсСнии ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ снова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ индСкс, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ вновь. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ индСкса примСняСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ REBUILD инструкции ALTER TABLE.

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ кластСризованном индСксС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ нСдоступны, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС страницы Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с кластСризованным индСксом хранятся Π² Π΅Π³ΠΎ ΡƒΠ·Π»Π°Ρ… Π΄Π΅Ρ€Π΅Π²Π°.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ индСксов

Для удалСния индСксов Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… примСняСтся инструкция DROP INDEX. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ кластСризованного индСкса Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ рСсурсоСмкой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‚.ΠΊ. потрСбуСтся ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ всС нСкластСризованныС индСксы. (ВсС нСкластСризованныС индСксы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ»ΡŽΡ‡ индСкса кластСризованного индСкса, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² своих страницах ΡƒΠ·Π»ΠΎΠ².) ИспользованиС инструкции DROP INDEX для удалСния индСкса ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅:

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ DROP INDEX ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ MOVE TO, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ ON инструкции CREATE INDEX. Π˜Π½Ρ‹ΠΌΠΈ словами, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ строки Π΄Π°Π½Π½Ρ‹Ρ…, находящиСся Π² страницах ΡƒΠ·Π»ΠΎΠ² кластСризованного индСкса. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π½ΠΎΠ²ΠΎΠ΅ мСсто Π² Π²ΠΈΠ΄Π΅ ΠΊΡƒΡ‡ΠΈ. Для Π½ΠΎΠ²ΠΎΠ³ΠΎ мСста хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ DROP INDEX нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для удалСния индСксов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ нСявно систСмой для ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ цСлостности, Ρ‚Π°ΠΊΠΈΡ… индСксов, ΠΊΠ°ΠΊ PRIMARY KEY ΠΈ UNIQUE. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ индСксы, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ sp_rename.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π² срСдС Management Studio с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ обозрСватСля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Но самым простым способом Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ Indexes Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ индСксами Π² срСдС Management Studio Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π² этой срСдС.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ созданию ΠΈ использованию индСксов

Π₯отя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… практичСских ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° количСство индСксов, ΠΏΠΎ ΠΏΠ°Ρ€Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ это количСство слСдуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ индСкс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ объСм дискового пространства, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, сущСствуСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ количСство страниц индСкса Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ΡŒ количСство страниц Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Π΅. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ получСния Π²Ρ‹Π³ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ использовании индСкса для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, вставка ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π³ΠΎΠ΄Ρ‹ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ нСобходимости обслуТивания индСкса. Π§Π΅ΠΌ большС индСксов ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°, Ρ‚Π΅ΠΌ больший трСбуСтся объСм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΈΡ… Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠžΠ±Ρ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ индСксы для частых запросов, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… использованиС.

НСкоторыС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ созданию ΠΈ использованию индСксов ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅. ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ всСго лишь ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΡ… ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ способа использования Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈ Ρ‚ΠΈΠΏΠ° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто выполняСмых запросов. Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ столбца, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½Π΅ принСсСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·Ρ‹.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΈ условия прСдлоТСния WHERE

Если ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ WHERE инструкции SELECT содСрТит условиС поиска с ΠΎΠ΄Π½ΠΈΠΌ столбцом, Ρ‚ΠΎ для этого столбца слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс. Π­Ρ‚ΠΎ особСнно рСкомСндуСтся ΠΏΡ€ΠΈ высокой сСлСктивности условия. Под ΡΠ΅Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ (selectivity) условия имССтся Π² Π²ΠΈΠ΄Ρƒ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ количСства строк, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΡ… ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ количСству строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Высокой сСлСктивности соотвСтствуСт ΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ этого ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° поиска с использованиСм индСксированного столбца Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΡ€ΠΈ сСлСктивности условия, Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰Π΅ΠΉ 5%.

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† Π½Π΅ слСдуСт ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ постоянном ΡƒΡ€ΠΎΠ²Π½Π΅ сСлСктивности условия 80% ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС для страниц индСкса ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ Π»ΡŽΠ±ΡƒΡŽ экономию Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄ΠΎΡΡ‚ΠΈΠ³Π°Π΅ΠΌΡƒΡŽ Π·Π° счСт использования индСксов. Π’ этом случаС быстрСС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск сканированиСм Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ запросов, дСлая индСкс бСсполСзным.

Если условиС поиска часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ запроса содСрТит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ AND, Π»ΡƒΡ‡ΡˆΠ΅ всСго Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ составной индСкс ΠΏΠΎ всСм столбцам Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ WHERE инструкции SELECT. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ составного индСкса ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ происходит созданиС составного индСкса ΠΏΠΎ всСм столбцам прСдлоТСния WHERE. Π’ этом запросС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ AND соСдинСны Π΄Π²Π° условия, поэтому для ΠΎΠ±ΠΎΠΈΡ… столбцов Π² этих условиях слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ составной нСкластСризованный индСкс.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ соСдинСния

Π’ случаС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ соСдинСния рСкомСндуСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСкс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ соСдиняСмого столбца. БоСдиняСмыС столбцы часто ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ внСшний ΠΊΠ»ΡŽΡ‡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Если ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ограничСния для обСспСчСния цСлостности PRIMARY KEY ΠΈ FOREIGN KEY для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… соСдиняСмых столбцов, слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСкластСризованный индСкс для столбца внСшнСго ΠΊΠ»ΡŽΡ‡Π°, Ρ‚.ΠΊ. систСма нСявно создаст кластСризованный индСкс для столбца ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ созданиС индСксов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ запрос с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ соСдинСния ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ:

Для запроса Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ рСкомСндуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… индСкса для столбца Id Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Employee, ΠΈ столбца EmpId Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Works_on. ΠšΡ€ΠΎΠΌΠ΅ этого, слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ индСкс для столбца EnterDate.

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ всСх столбцов запроса Π² индСкс ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запроса. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ индСкса, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ (covering), ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Address удаляСтся индСкс IX_Address_StateProvinceID. Π—Π°Ρ‚Π΅ΠΌ создаСтся Π½ΠΎΠ²Ρ‹ΠΉ индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΈΠΌΠΎ столбца PostalCode Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… столбца. НаконСц, инструкция SELECT Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ запрос, ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ индСксом. Для этого запроса систСмС Π½Π΅Ρ‚ нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск Π΄Π°Π½Π½Ρ‹Ρ… Π² страницах Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ всС значСния столбцов Π² страницах ΡƒΠ·Π»ΠΎΠ² нСкластСризованного индСкса.

ΠŸΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ индСксы рСкомСндуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ страницы индСксов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТат Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС записСй, Ρ‡Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ страницы Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΡ€ΠΎΠΌΠ΅ этого, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΡ‹Π΅ столбцы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ столбцами Π² индСксС.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ для вычисляСмых столбцов

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ индСксов:

индСксы для вычисляСмых столбцов;

индСксы сохранСния столбца;

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ вычисляСмыС столбцы ΠΈ связанныС с Π½ΠΈΠΌΠΈ индСксы.

называСтся столбСц Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вычислСний Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Π°ΠΊΠΎΠΉ столбСц ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ постоянным. Π­Ρ‚ΠΈ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° столбцов рассмотрСны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π°Π»Π΅Π΅ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ вычисляСмыС столбцы

ВычисляСмый столбСц, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ кластСризованного индСкса, являСтся логичСским, Ρ‚.Π΅. ΠΎΠ½ физичСски Π½Π° ТСстком дискС Π½Π΅ хранится. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ вычисляСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ строкС. ИспользованиС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… вычисляСмых столбцов ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅:

Π’Π°Π±Π»ΠΈΡ†Π° Orders Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… вычисляСмых столбца: total ΠΈ shippeddate. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† total вычисляСтся с использованиСм Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… столбцов, price ΠΈ quantity, Π° столбСц shippeddate вычисляСтся ΠΏΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DATEADD ΠΈ столбца orderdate.

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Π΅ вычисляСмыС столбцы

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Database Engine позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ индСксы для Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… вычисляСмых столбцов, Π³Π΄Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ столбцы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. (ВычисляСмый столбСц называСтся Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Ссли всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ значСния для ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.)

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ вычисляСмый столбСц ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ инструкции SET присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ON (эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ столбца):

ΠšΡ€ΠΎΠΌΠ΅ этого, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ NUMERIC_ROUNDABORT Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ off.

Если для вычисляСмого столбца ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ кластСризованный индСкс, Ρ‚ΠΎ значСния столбца Π±ΡƒΠ΄ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ физичСски Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… строках Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ страницы ΡƒΠ·Π»ΠΎΠ² кластСризованного индСкса содСрТат строки Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ созданиС кластСризованного индСкса для вычисляСмого столбца total ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Orders:

ПослС выполнСния инструкции CREATE INDEX вычисляСмый столбСц total Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ физичСски. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС обновлСния Π±Π°Π·ΠΎΠ²Ρ‹Ρ… столбцов вычисляСмого столбца Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ постоянным ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ PERSISTED. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ позволяСт Π·Π°Π΄Π°Ρ‚ΡŒ физичСскоС Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ вычисляСмого столбца, Π΄Π°ΠΆΠ΅ Π½Π΅ создавая ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ кластСризованного индСкса. Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ трСбуСтся для создания физичСских вычисляСмых столбцов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° столбцах с ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… (float ΠΈΠ»ΠΈ real). (Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, индСкс для вычисляСмого столбца ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ столбцы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….)

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *