sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo aumentan el rendimiento de la base de datos los registros de longitud fija y los campos de longitud fija?

Explicación simplificada, conceptual, no específica de la base de datos:

Cuando se conoce de antemano la longitud máxima posible del registro, el final del registro/el comienzo del siguiente registro se puede encontrar en tiempo constante. Esto se debe a que esa ubicación se puede calcular mediante una suma simple, muy similar a la indexación de matrices. Imagina que estoy usando int s como punteros a registros, y que el tamaño del registro es una constante entera definida en alguna parte. Luego, para pasar de la ubicación del registro actual a la siguiente:

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

¡Eso es!

Alternativamente, al usar registros y campos terminados en cadena (o delimitados de otro modo), puede imaginar que el siguiente campo/registro se encuentra mediante un escaneo de tiempo lineal, que tiene que mirar cada carácter hasta que se encuentra el delimitador. 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 podría ser una versión simplificada o ingenua de la implementación del mundo real, pero la idea general sigue en pie:no puede hacer fácilmente la misma operación en tiempo constante, e incluso si fuera en tiempo constante, es poco probable que sea tan rápido como realizando una sola operación de adición.