Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment les enregistrements de longueur fixe et les champs de longueur fixe augmentent-ils les performances de la base de données ?

Explication simplifiée, conceptuelle, non spécifique à la base de données :

Lorsque la longueur d'enregistrement maximale possible est connue à l'avance, la fin de l'enregistrement/le début de l'enregistrement suivant peut être trouvé en temps constant. En effet, cet emplacement est calculable à l'aide d'une simple addition, très similaire à l'indexation de tableau. Imaginez que j'utilise int s comme pointeurs vers des enregistrements, et que la taille de l'enregistrement est une constante entière définie quelque part. Ensuite, pour passer de l'emplacement actuel de l'enregistrement au suivant :

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

C'est tout !

Alternativement, lors de l'utilisation d'enregistrements et de champs terminés par une chaîne (ou autrement délimités), vous pouvez imaginer que le champ/enregistrement suivant est trouvé par une analyse en temps linéaire, qui doit examiner chaque caractère jusqu'à ce que le délimiteur soit trouvé. Comme avant,

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

Il s'agit peut-être d'une version simplifiée ou naïve de l'implémentation réelle, mais l'idée générale reste valable :vous ne pouvez pas facilement effectuer la même opération en temps constant, et même si c'était en temps constant, il est peu probable qu'elle soit aussi rapide que effectuer une seule opération d'ajout.