Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Π€Π°ΠΉΠ»: Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π² ΡŽΡ€ΠΈΠ΄ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.doc

Π’Π£Π—: НС ΡƒΠΊΠ°Π·Π°Π½

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ: НС ΡƒΠΊΠ°Π·Π°Π½

Дисциплина: НС ΡƒΠΊΠ°Π·Π°Π½Π°

Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π°: 23.07.2019

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΎΠ²: 26275

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΉ: 262

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Π’223: На ΠΊΠ°ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ управлСния функция планирования Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ мСсто?

Π’224: КакоС количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ расчСта ΠΏΠΎ нСскольким Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ подстановки?

Π’225: Бколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² диспСтчСрС сцСнариСв?

Π’226: Π—Π°Π΄Π°Ρ‡Π° цСлСполагания – это

О226: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ состояния ΠΈΠ»ΠΈ повСдСния систСмы

Π’227: Π’ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ процСссы:

Π’228: К ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ относятся:

Π’229: КакиС свойства элСмСнта «Кнопка» ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ?

О229: Caption, Cancel, Default, Accelerator

Π’230: Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ контроля Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° этапС сбора ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ?

Π’231: ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ модСль – это:

О231: модСль, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для описания свойств ΠΈ характСристик ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ события матСматичСскиС символы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π’232: Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ?

О232: ΠΎΠ±Ρ‰ΠΈΠΉ индСкс Ρ„Π°ΠΉΠ»Π° прСдставляСт собой ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ ΠΈΠ»ΠΈ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру

Π’233: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ этап процСсса систСмного модСлирования

О233: структуризация ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области (построСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области)

О234: тСкст Π² ΠΎΠΊΠ½Π΅ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказки, связанной с элСмСнтом управлСния

Π’235: Богласно ΠΊΠ°ΠΊΠΎΠΌΡƒ свойству ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, для ΠΊΠ°ΠΊΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ информация Π±ΡƒΠ΄Π΅Ρ‚ использована?

Π’236: ΠŸΡ€ΠΎΡ†Π΅ΡΡ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… стадий:

О236: рСализация Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ², ΠΎΡ†Π΅Π½ΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

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

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Doctrine

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ иСрархичСских Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ попросту β€” Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²) Π² рСляционных структурах Π·Π°Π΄Π°Ρ‡Π° довольно Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, это связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ рСляционныС Π±Π°Π·Ρ‹ Π½Π΅ приспособлСны ΠΊ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ иСрархичСских структур (ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, XML-Ρ„Π°ΠΉΠ»Ρ‹), структура рСляционных Ρ‚Π°Π±Π»ΠΈΡ† прСдставляСт ΠΈΠ· сСбя простыС списки. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ связь Β«Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-наслСдники», которая Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² рСляционной структурС.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π·Π°Π΄Π°Ρ‡Π° Β«Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…Β» Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π»ΡŽΠ±Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ.

НиТС ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ хранСния Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Π² рСляционных Π‘Π”, Π° Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим инструмСнтарий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ прСдоставляСт ORM Doctrine для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌΠΈ структурами.

Бписок смСТных Π²Π΅Ρ€ΡˆΠΈΠ½ (Adjacency List)

ОписаниС структуры

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, такая структура Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ смСТных Π²Π΅Ρ€ΡˆΠΈΠ½Π°Ρ… нашСго Π΄Π΅Ρ€Π΅Π²Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Π³Ρ€Π°Ρ„ с тСмя Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ (1,2,3):

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рис. 1. Π“Ρ€Π°Ρ„ с трСмя Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ

Как Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ связи с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ элСмСнтами, Ρ‚.Π΅.:

ЀактичСски, для построСния Π΄Π΅Ρ€Π΅Π²Π° Ρ‚Π°ΠΊΠΎΠΉ Π³Ρ€Π°Ρ„ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π΅Π½, Ρ‚.ΠΊ. для ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΉ вСтвистой структуры Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ связь Β«Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-наслСдник», Ρ‚.Π΅.:

Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎ с ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ элСмСнтом (1) ΠΈ двумя Π²Π΅Ρ‚ΠΊΠ°ΠΌΠΈ (2,3):

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Ρ‚ΠΎΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π³Ρ€Π°Ρ„Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ, ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ списка смСТных Π²Π΅Ρ€ΡˆΠΈΠ½, Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Ρ€Π΅Π²ΡŒΡ, остановимся Π½Π° Π½ΠΈΡ….

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ списка смСТных Π²Π΅Ρ€ΡˆΠΈΠ½ (Adjacency List), Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ связях «наслСдник-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΒ» Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅Ρ€Π΅Π²Π°:

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рис. 3. ДрСвовидная структура ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ смСТных Π²Π΅Ρ€ΡˆΠΈΠ½

На рисункС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°ΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ΡƒΠ·Π»Ρ‹ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π². Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π΅ΡΡ‚ΡŒ имя (Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°), ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Π»Π΅Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚) ΠΈ ссылка Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ родитСля (ΠΏΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚). Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Рис. 3, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ наслСдник Π² Ρ‚Π°ΠΊΠΎΠΉ структурС ссылаСтся Π½Π° своСго ΠΏΡ€Π΅Π΄ΠΊΠ°. Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Π‘Π” ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ это ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рис. 4. Π’Π°Π±Π»ΠΈΡ†Π° Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²Π°, построСнная ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ списка смСТных Π²Π΅Ρ€ΡˆΠΈΠ½

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ сразу ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ хранСния Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°ΠΊ достоинствами, Ρ‚Π°ΠΊ ΠΈ нСдостатками. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ½ Π½Π΅ совсСм ΡƒΠ΄ΠΎΠ±Π΅Π½ для чтСния β€” ΠΈ это Π΅Π³ΠΎ основной нСдостаток.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· Π‘Π” ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹, Ссли Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ всС Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Π­Ρ‚ΠΎ достаточно простой запрос:

Однако Π² дальнСйшСм такая Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ достаточно Π΅ΠΌΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ пост-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ рСкурсивно ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ связСй Β«ΠΏΡ€Π΅Π΄ΠΎΠΊ-наслСдник» ΠΈ лишь ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΡƒΠ΄Π°-Π»ΠΈΠ±ΠΎ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ чтСния Π΄Π΅Ρ€Π΅Π²Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ:

Π₯отя Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ приспособлСны сразу для Π²Ρ‹Π²ΠΎΠ΄Π°, Π½ΠΎ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π³Π»Π°Π²Π½Ρ‹ΠΉ нСдостаток Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ достовСрно Π·Π½Π°Ρ‚ΡŒ количСство ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ влоТСнности Π² вашСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅ΠΌ большС иСрархия, Ρ‚Π΅ΠΌ большС JOIN’ΠΎΠ² β€” Ρ‚Π΅ΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°Π½Π½Ρ‹ΠΉ способ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΈ сущСствСнными достоинствами β€” Π² Π΄Π΅Ρ€Π΅Π²ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния, ΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΡƒΠ·Π»Ρ‹.

Π’Ρ‹Π²ΠΎΠ΄ β€” Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ, Ссли Π²Ρ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ с нСбольшими Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½Ρ‹ΠΌΠΈ структурами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ измСнСниям.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ довольно ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎ сСбя чувствуСт ΠΈ с большими Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ, Ссли ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… порциями Π²ΠΈΠ΄Π° «знаю родитСля β€” ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всСх наслСдников». Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ случая β€” динамичСски ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ. Π’ этом случаС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ практичСски ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния.

Однако ΠΎΠ½ ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ½Ρ‹Π΅ куски Π΄Π΅Ρ€Π΅Π²Π°, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ, ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ ΠΏΡ€ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ Π΄Π΅Ρ€Π΅Π²Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ (Π½Π° всю Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ).

ИспользованиС списка смСТных Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Doctrine

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

Π˜Ρ‚Π°ΠΊ, сущности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π² ORM Doctrine β€” это Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ записи (Active Record). Π’.Π΅. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Π² сСбС бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ сами ΡƒΠΌΠ΅ΡŽΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Но Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Doctrine прСдусмотрСли Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² записСй Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наслСдованиСм, Π½ΠΎ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊ этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ «шаблонов повСдСния». Π­Ρ‚ΠΎ рСализуСтся ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ Doctrine/Template.

Π’.ΠΎ., Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΎΡΠΏΠΈΡ‚Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ запись Π΄ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ повСдСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Versionable β€” ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ Π°ΡƒΠ΄ΠΈΡ‚ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, I18N β€” многоязычная ΠΈΠ»ΠΈ NestedSet β€” дрСвовидная Π²ΠΈΠ΄Π° Β«Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ мноТСство»), Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π· с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½Ρ‹Ρ… шаблонов повСдСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… шаблонов, достаточно ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°ΡˆΡƒ модСль (посрСдством YAML ΠΈΠ»ΠΈ прямо Π² ΠΊΠΎΠ΄Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ).

Когда ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ врСмя, ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Пока, ΠΊ соТалСнию, ΠΈΠ»ΠΈ ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ шаблона ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ списка смСТных Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Doctrine Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ сами ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Doctrine, β€” это ΡƒΠΆΠ΅ Π½Π° вашС усмотрСниС.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Doctrine ΠΈ Π±Π΅Π· использования шаблонов повСдСния. К соТалСнию, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ, Π½ΠΎ основныС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ смоТСм.

Для этого слСдуСт ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ модСль Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ YAML опишСм структуру нашСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

А Π²ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ самоС Π²Π°ΠΆΠ½ΠΎΠ΅ β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ связи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π’Π°ΠΌ ΠΆΠ΅ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строчки напишСм:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ собСрСм Π½Π°ΡˆΡƒ модСль, запустив ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

ВсС. МодСль Π³ΠΎΡ‚ΠΎΠ²Π°. ЀактичСски Ρ‚ΠΎΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС BaseAlTree:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π½Π°ΡΠ»Π°Π΄ΠΈΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ нашСй Ρ€Π°Π±ΠΎΡ‚Ρ‹. НапишСм нСслоТный ΠΊΠΎΠ΄, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Π΄Π΅Ρ€Π΅Π²ΠΎ, построСнноС с отступами Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ HTML-страницС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ сконфигурировали Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ связи Ρƒ нашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½Π°ΠΌ стали доступны свойства Children ΠΈ Parent. Однако любоС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ запрос ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, для построСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ довольно Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌ.

Но Π² Ρ‚ΠΎΠΆΠ΅ врСмя, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСски ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ‚Π°ΠΊΠΈΠΌ способом β€” ΠΎΠ΄Π½ΠΎ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅!

Π’Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ мноТСство (Nested Set)

ОписаниС структуры

Об этом Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΈ Π΅Π³ΠΎ быстродСйствии, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ всС Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. Π”Π°, этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆ, ΠΊΠΎΠ³Π΄Π° трСбуСтся часто ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ иСрархичСским Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. Рассмотрим ΡΡƒΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

ΠŸΡ€ΠΈ построСнии Π΄Π΅Ρ€Π΅Π²Π° Π½Π° основС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… мноТСств, ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ ΠΎΠ±Ρ…ΠΎΠ΄Π° этого Π΄Π΅Ρ€Π΅Π²Π° слСва-Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ стрСлками Π½Π° Рис. 5. Для этого ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π΄Π΅Ρ€Π΅Π²Π° цСлочислСнныС ΠΊΠ»ΡŽΡ‡ΠΈ слСва (lft) ΠΈ справа (rgt) (Π½ΠΈΠΆΠ½ΠΈΠ΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΡƒΠ·Π»Π°). И Ρ€Π°Π·Π΄Π°Π΄ΠΈΠΌ ΠΈΠΌ Π²ΠΎ врСмя ΠΎΠ±Ρ…ΠΎΠ΄Π° цСлочислСнныС ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ значСния. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рис. 5. Π’Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ мноТСство (Nested Set).

ΠšΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΊΠ»ΡŽΡ‡ΠΈ 1 ΠΈ 14, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ чисСл всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π’Π΅Ρ‚ΠΊΠ° VEGETABLE ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° ΠΊΠ»ΡŽΡ‡ΠΈ 2 ΠΈ 7, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ чисСл ΠΊΠ»ΡŽΡ‡Π΅ΠΉ всСх Π΅Π΅ наслСдников ΠΈ Ρ‚.Π΄. Π’ΠΎΡ‚ ΠΎΠ½ΠΈ β€” Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ мноТСства. ВсС просто, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ?

Π”Π°Π²Π°ΠΉΡ‚Π΅ воссоздадим Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ структуру Π² контСкстС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π‘Π”.

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рис. 6. Π’Π°Π±Π»ΠΈΡ†Π° иСрархичСских Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° основС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… мноТСств

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ β€” level. Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ информация ΠΎΠ± ΡƒΡ€ΠΎΠ²Π½Π΅ влоТСнности ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π΄Π΅Ρ€Π΅Π²Π°. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, это Π΄Π΅Π»Π°Ρ‚ΡŒ вовсС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ β€” ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ влоТСнности ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно просто вычислСн, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ Ρ€Π°Π· для чтСния, Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π° счСт ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΡƒΡ€ΠΎΠ²Π½Π΅? РиторичСский вопрос…

Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΈΠ· Π‘Π”

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

ВСорСтичСски, Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΡ‹ Π±Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, вычисляя ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ влоТСнности Π½Π° Π»Π΅Ρ‚Ρƒ:

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ β€” ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ. Волько сам запрос Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΠΎΠ»Π΅Π΅ рСсурсоСмкий. А Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Nested Set β€” это ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ чтСния, Ρ‚ΠΎ нСбольшая оптимизация Π² Π²ΠΈΠ΄Π΅ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ уровня влоТСнности рядом с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ такая ΡƒΠΆ ΠΈ плохая стратСгия.

Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅, довольно нСслоТным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ, ΠΏΡƒΡ‚ΠΈ ΠΈΠ· нашСго Π΄Π΅Ρ€Π΅Π²Π°, ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡƒΠ·Π»Ρ‹ ΠΈ Ρ‚.Π΄.

НапримСр, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ всС ΠΎΠ²ΠΎΡ‰ΠΈ (VEGETABLE) ΠΈΠ· нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ достаточно просто:

Π”Π°, быстроС ΠΈ Π³ΠΈΠ±ΠΊΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡŽ с внСшними связанными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ β€” ΠΊΠΎΠ½Π΅ΠΊ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ…ΡƒΠ΄Π° Π±Π΅Π· Π΄ΠΎΠ±Ρ€Π°, ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трудности Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ внСсти измСнСния Π² Nested Set Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π΅Π³ΠΎ Π²Π΅Ρ‚Π²Π΅ΠΉ.

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

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ SEA FOOD Π² нашС Π΄Π΅Ρ€Π΅Π²ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ с VEGETABLES ΠΈ FRUIT.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² MySQL Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ MYISAM, ΠΈΠ»ΠΈ Π²Π΅Ρ€ΡΠΈΡŽ, которая Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вмСсто BEGIN ΠΈ COMMIT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° запись:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π·Π°Π΄Π°Ρ‡Π° Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ достаточно затратная ΠΈ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ вновь ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ:

Π’Ρ‹Π²ΠΎΠ΄ β€” Nested Set Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ структуру Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΈΠ· Π‘Π”. ΠŸΡ€ΠΈ этом ΠΎΠ½ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ…ΠΎΡ€ΠΎΡˆ для Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² любого объСма.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, для иСрархичСских структур, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ частому измСнСнию ΠΎΠ½, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ.

ИспользованиС Nested Set в Doctrine

А Π²ΠΎΡ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Doctrine Π² Π²ΠΈΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ шаблона повСдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊ нашСй ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это довольно просто, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‡Π΅Ρ€Π΅Π· YAML-ΠΊΠΎΠ½Ρ„ΠΈΠ³ ΠΈΠ»ΠΈ ΠΏΡ€Π°ΠΌΠΎ Π² ΠΊΠΎΠ΄Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, достаточно просто ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ actAs: [NestedSet] Π² описании класса.

Однако Doctrine прСдоставляСт Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ NestedSet ΠΌΠΎΠ΄Π΅Π»ΠΈ. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ нСсколько Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π². Для этого, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ввСсти Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ корня Π΄Π΅Ρ€Π΅Π²Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи.

Π’ этом случаС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ слСдовало Π±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ВсС Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½ΠΎ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ случая:

Для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ случая (нСсколько Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²):

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Doctrine ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ‘root_id’ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ поля ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ эту ΠΎΠΏΡ†ΠΈΡŽ, Ссли ΠΎΠ½ΠΎ совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² вашСй Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ Nested Set Π² Doctrine

ИзвлСкаСм ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ всС Π΄Π΅Ρ€Π΅Π²ΠΎ Π½Π° экран:

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ это просто!

Π—Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Doctrine, Ρ€Π°Π·Π΄Π΅Π»Ρ‹ 8.2.4 ΠΈ 8.2.5

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ (Materialized Path)

ОписаниС структуры

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ довольно интСрСсный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для хранСния иСрархичСских структур. Основная идСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π² Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΊ ΡƒΠ·Π»Ρƒ ΠΎΡ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π΄Π΅Ρ€Π΅Π²Π°. Выглядит это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рис. 7. ДрСвовидная структура, организованная ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Β«ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒΒ»

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ формирования Ρ‚Π°ΠΊΠΈΡ… ΠΏΡƒΡ‚Π΅ΠΉ достаточно прост. Π“Π»ΡƒΠ±ΠΈΠ½Π° ΠΏΡƒΡ‚ΠΈ β€” это ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π΅Ρ€Π΅Π²Π°. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π²Π΅Ρ‚ΠΊΠΈ нумСрация β€” инкрСмСнтная. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, VEGETABLE β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅Π±Π΅Π½ΠΎΠΊ FOOD, FRUIT β€” Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅Π±Π΅Π½ΠΎΠΊ ΠΈ Ρ‚.Π΄.

ΠŸΡ€ΠΎΡ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° это Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ наглядно.

Π’ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… всС это Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рис. 8. структура Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ иСрархичСских Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Β«ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒΒ»

Π’ Ρ‡Π΅ΠΌ ΠΆΠ΅ прСимущСство Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°?

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Nested Set, ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ поддаСтся измСнСниям. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя остаСтся достаточно ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΠΈΡ… частСй. Но, ΠΈ ΠΎΠ½ Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½. ОсобСнно ΠΏΠΎ части поиска ΠΏΡ€Π΅Π΄ΠΊΠΎΠ² Π²Π΅Ρ‚ΠΊΠΈ.

Поиск ΠΏΡƒΡ‚ΠΈ ΠΊ ΡƒΠ·Π»Ρƒ:

ВычислСниС уровня влоТСнности.

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π°ΠΌ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ достаточно ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ»-Π²ΠΎ Ρ‚ΠΎΡ‡Π΅ΠΊ (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ) Π² путях. К соТалСнию, MySQL Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ подходящСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ достаточно просто своими силами:

Π’Ρ‹Π±ΠΎΡ€ Π²Π΅Ρ‚ΠΊΠΈ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ воспользовались нашСй самописной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈ это Π±Ρ‹Π»ΠΎ достаточно ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Поиск родитСля:

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

Насколько извСстно Π°Π²Ρ‚ΠΎΡ€Ρƒ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ довольно ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎ сСбя чувствуСт Π½Π° достаточно Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

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

А Π²ΠΎΡ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° β€” это ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ довольно простыС, ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ слоТностСй Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ нСсколько ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΏΡƒΡ‚Π΅ΠΌ ввСдСния Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля level, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ сдСлано для списков смСТных Π²Π΅Ρ€ΡˆΠΈΠ½ (Nested Set). Однако это нСсколько услоТнит ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ добавлСния, измСнСния ΠΈ удалСния ΡƒΠ·Π»ΠΎΠ² Π΄Π΅Ρ€Π΅Π²Π°, Ρ‚.ΠΊ. ΡƒΡ€ΠΎΠ²Π½ΠΈ придСтся ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ для всСго ΠΈΠ»ΠΈ части Π΄Π΅Ρ€Π΅Π²Π° ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΡƒΡŽ сторону слСдуСт Π΄Π΅Π»Π°Ρ‚ΡŒ пСрСкос ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ИспользованиС в Doctrine

К соТалСнию, Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ хранСния Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΏΠΎΠΊΠ° Π½Π΅ нашСл своСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ORM Doctrine (тСкущая вСрсия Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° β€” 1.0.4, 1.1.0 β€” Π² Π°Π»ΡŒΡ„Π° вСрсии Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚).

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ всС прСдпосылки ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ рСализация появится Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Ρ‚.ΠΊ. исходныС ΠΊΠΎΠ΄Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ содСрТат Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Doctrine/Tree абстракный пустой класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ MaterializedPath.

Автор Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° событиями ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рСализация Π½Π°ΠΉΠ΄Π΅Ρ‚ своС ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сюда Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΏΠΎΠ·ΠΆΠ΅.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

ЀактичСски, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π‘Π” ограничиваСтся Π²Π²ΠΎΠ΄ΠΎΠΌ поля, хранящСго ссылку Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ запись Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ списков смСТности ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ:

Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ созданиС индСкса ΠΏΠΎ иСрархичСскому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рис. 9. Π’Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ иСрархичСских структур Π΄Π°Π½Π½Ρ‹Ρ… AL+MP ΠΈ AL+NS

ΠŸΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹.

AL+MP

AL+NS

Для связки AL+NS Π²Π·Π°ΠΈΠΌΠΎΠ²Ρ‹Π³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ это ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ нСдостатки ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ измСнСния ΡƒΠ·Π»ΠΎΠ² Π΄Π΅Ρ€Π΅Π²Π° Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ NS Π½Π°ΠΏΡ€ΠΎΡ‡ΡŒ ΡƒΠ±ΠΈΠ²Π°ΡŽΡ‚ Π² этой сфСрС всС достоинства AL. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΡƒΡŽ связку слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ лишь ΠΊΠ°ΠΊ качСствСнноС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ поиска Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ наслСдников Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ NS, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ надСТности самого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° (ΠΊΠ»ΡŽΡ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ всСгда ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² случаС ΠΏΠΎΡ€Ρ‡ΠΈ β€” ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ связях Ρ…Ρ€Π°Π½ΠΈΡ‚ AL). Π£Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ надСТности справСдливо ΠΈ для ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Но вСдь ΠΈ это качСствСнноС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅, хотя ΠΈ Π½Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ?

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли нСсколько основных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² хранСния иСрархичСских Π΄Π°Π½Π½Ρ‹Ρ… Π² рСляционных Π‘Π” ΠΈ ΠΎΡ‡Π΅Ρ€Ρ‚ΠΈΠ»ΠΈ всС ΠΈΡ… достоинства ΠΈ нСдостатки. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… доступны для использования Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ORM Doctrine, ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

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

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

ВсС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ индСксы 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.

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

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

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