Oracle
 sql >> Database >  >> RDS >> Oracle

In che modo i record a lunghezza fissa e i campi a lunghezza fissa aumentano le prestazioni del database?

Spiegazione semplificata, concettuale, non specifica del database:

Quando si conosce in anticipo la lunghezza massima possibile del record, è possibile trovare la fine del record/l'inizio del record successivo a tempo costante. Questo perché quella posizione è calcolabile usando una semplice addizione, molto simile all'indicizzazione di array. Immagina che io stia usando int s come puntatori a record e che la dimensione del record è una costante intera definita da qualche parte. Quindi, per passare dalla posizione del record corrente a quella successiva:

int current_record = /* whatever */;
int next_record = current_record + FIXED_RECORD_SIZE;

Ecco fatto!

In alternativa, quando si utilizzano record e campi con terminazione di stringhe (o delimitati in altro modo), è possibile immaginare che il campo/record successivo venga trovato da una scansione a tempo lineare, che deve esaminare ogni carattere fino a trovare il delimitatore. Come prima,

char DELIMITER = ','; // or whatever
int current_record = /* whatever */;
int next_record = current_record;
while(character_at_location(next_record) != DELIMITER) {
    next_record++;
}

Questa potrebbe essere una versione semplificata o ingenua dell'implementazione nel mondo reale, ma l'idea generale è ancora valida:non puoi eseguire facilmente la stessa operazione a tempo costante e, anche se fosse a tempo costante, è improbabile che sia veloce come eseguire una singola operazione di aggiunta.