簡略化された、概念的な、データベース固有ではない説明:
可能な最大レコード長が事前にわかっている場合、レコードの終わり/次のレコードの始まりを一定時間で見つけることができます。これは、その場所が単純な加算を使用して計算可能であり、配列のインデックス付けと非常によく似ているためです。 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++;
}
これは実際の実装の単純化されたバージョンまたはナイーブなバージョンである可能性がありますが、一般的な考え方は依然として有効です。一定の時間で同じ操作を簡単に実行することはできず、一定の時間であっても、それほど高速になる可能性は低いです。単一の追加操作を実行します。