Опростено, концептуално, неспецифично за базата данни обяснение:
Когато максималната възможна дължина на записа е известна предварително, краят на записа/началото на следващия запис може да бъде намерен в постоянно време. Това е така, защото това местоположение е изчислимо с помощта на просто събиране, много аналогично на индексирането на масиви. Представете си, че използвам int
s като указатели към записи и че размерът на записа е целочислена константа, дефинирана някъде. След това, за да стигнете от текущото местоположение на записа до следващото:
int current_record = /* whatever */;
int next_record = current_record + FIXED_RECORD_SIZE;
Това е!
Като алтернатива, когато използвате завършващи с низове (или разделени по друг начин) записи и полета, можете да си представите, че следващото поле/запис се намира чрез сканиране в линейно време, което трябва да разглежда всеки знак, докато бъде намерен разделителят. Както преди,
char DELIMITER = ','; // or whatever
int current_record = /* whatever */;
int next_record = current_record;
while(character_at_location(next_record) != DELIMITER) {
next_record++;
}
Това може да е опростена или наивна версия на реализацията в реалния свят, но общата идея остава в сила:не можете лесно да извършите същата операция за постоянно време и дори да беше постоянно време, малко вероятно е да е толкова бързо, колкото извършване на една операция за добавяне.