(Отговори, базирани на SQL Server - въпросът не уточнява 100%)
В клъстерираните индекси самите възли на листово ниво държат данните в сортиран ред, нали?
Това не е съвсем правилно, данните могат да се съхраняват във всякакъв ред на листа, но масивът от слотове на страницата всъщност е редът, в който данните се четат извън страницата - не физическият ред на данните.
Тоест, с всяко вмъкване/актуализиране/изтриване, възлите се разместват отново, за да се поддържа сортираният ред.
Възли (напр. страниците се разделят и указателите напред/назад в списъка с двойни връзки се променят), но вътре в страницата масивите от слотове все още са обектът, който запазва реда, самите редове няма да бъдат разбъркани, за да съответстват на реда на масива от слотове.
И така, как данните могат да бъдат извлечени от него в реда, в който са били въведени?
Обикновено не е гарантирано, че ще бъде в точния ред - това обикновено се случва на стегната страница, където масивът от слотове е по-представителен за реда, но отново не е гарантирано.
Представете си, че следните данни са вмъкнати в дадения ред: 1,7,4,5,2 и в това поле е създаден групиран индекс. Така че данните ще се съхраняват вътрешно в ред 1,2,4,5,7, нали?
Не, ще се съхранява 1,7,4,5,2 на страницата, но масивът от слотове ще прочете адресите на страницата като 7,5,4,2,1 (конструира се от края на страницата назад , така че четете наобратно.)
Така че това може да улесни по-бързото търсене на конкретна стойност, но какво ще стане, ако потребителят иска първите 3 стойности в реда, който е въвел?
Някак несъществено в този случай - освен че няма такава гаранция за подреждане, SQL ще прочете цялата страница в паметта. Ако искате да научите повече за SQL Internals на такова ниво, все пак бих препоръчал книгата Kalen Delaneys SQL Internals като един от най-добрите източници.
Ако искате някаква информация относно реда за вмъкване, предлагам някакъв вид inserted_timestamp
person
Andrew
schedule
01.07.2012