सरलीकृत, वैचारिक, गैर-डेटाबेस-विशिष्ट स्पष्टीकरण:
जब अधिकतम संभव रिकॉर्ड लंबाई पहले से ज्ञात हो, तो रिकॉर्ड का अंत/अगले रिकॉर्ड की शुरुआत स्थिर समय में पाई जा सकती है। ऐसा इसलिए है क्योंकि वह स्थान सरल जोड़ का उपयोग करके गणना योग्य है, जो सरणी अनुक्रमण के समान है। कल्पना कीजिए कि मैं 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++;
}
यह वास्तविक दुनिया के कार्यान्वयन का एक सरल या भोला संस्करण हो सकता है, लेकिन सामान्य विचार अभी भी खड़ा है:आप एक ही ऑपरेशन को निरंतर समय में आसानी से नहीं कर सकते हैं, और भले ही यह निरंतर समय हो, यह उतना तेज़ होने की संभावना नहीं है सिंगल ऐड ऑपरेशन कर रहा है।