Zjednodušené, koncepční vysvětlení, které není specifické pro databázi:
Když je předem známa maximální možná délka záznamu, lze konec záznamu/začátek dalšího záznamu najít v konstantním čase. Je to proto, že toto umístění je vyčíslitelné pomocí jednoduchého sčítání, velmi analogického k indexování pole. Představte si, že používám int
s jako ukazatele na záznamy a že velikost záznamu je někde definovaná celočíselná konstanta. Poté, abyste se dostali z aktuálního umístění záznamu na další:
int current_record = /* whatever */;
int next_record = current_record + FIXED_RECORD_SIZE;
To je ono!
Alternativně, při použití řetězců ukončených (nebo jinak oddělených) záznamů a polí si můžete představit, že další pole/záznam je nalezen skenováním v lineárním čase, které musí prohlížet každý znak, dokud není nalezen oddělovač. Jako předtím,
char DELIMITER = ','; // or whatever
int current_record = /* whatever */;
int next_record = current_record;
while(character_at_location(next_record) != DELIMITER) {
next_record++;
}
Toto může být zjednodušená nebo naivní verze implementace v reálném světě, ale obecná myšlenka stále platí:nemůžete snadno provést stejnou operaci v konstantním čase, a i kdyby to bylo konstantní čas, je nepravděpodobné, že by byla tak rychlá jako provedení jediné operace přidání.