Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como os registros de comprimento fixo e os campos de comprimento fixo aumentam o desempenho do banco de dados?


Explicação simplificada, conceitual e não específica do banco de dados:

Quando o comprimento máximo possível do registro é conhecido antecipadamente, o final do registro/início do próximo registro pode ser encontrado em tempo constante. Isso ocorre porque essa localização é computável usando adição simples, muito análoga à indexação de array. Imagine que estou usando int s como ponteiros para registros e que o tamanho do registro é uma constante inteira definida em algum lugar. Então, para ir do local do registro atual para o próximo:
int current_record = /* whatever */;
int next_record = current_record + FIXED_RECORD_SIZE;

É isso!

Alternativamente, ao usar registros e campos terminados por string (ou delimitados de outra forma), você pode imaginar que o próximo campo/registro é encontrado por uma varredura de tempo linear, que deve examinar todos os caracteres até que o delimitador seja encontrado. Como antes,
char DELIMITER = ','; // or whatever
int current_record = /* whatever */;
int next_record = current_record;
while(character_at_location(next_record) != DELIMITER) {
    next_record++;
}

Esta pode ser uma versão simplificada ou ingênua da implementação do mundo real, mas a ideia geral ainda permanece:você não pode facilmente fazer a mesma operação em tempo constante e, mesmo que fosse em tempo constante, é improvável que seja tão rápido quanto executando uma única operação de adição.