Acceso Secuencial vs Aleatorio13 temas

Acceso Secuencial vs Aleatorio

Leer datos consecutivos es hasta 100x más rápido que saltar entre ubicaciones dispersas: cada salto obliga al dispositivo a ubicar el dato antes de leerlo, y ubicar cuesta más que leer. Los datos contiguos se leen de corrido; los dispersos pagan esa búsqueda en cada salto.

Diagrama: Acceso secuencial vs aleatorio

El costo físico de leer fuera de orden

Medio Secuencial Aleatorio Diferencia
HDD ~100 MB/s ~1 MB/s 100x
SSD ~500 MB/s ~40 MB/s 12x
Regla:

Cuantos más saltos entre páginas dé una consulta, más lenta será. Cuanto más contiguo sea el acceso, mejor aprovechará el buffer pool y el read-ahead.


Full Table Scan: el peor caso del acceso aleatorio

Sin un índice, ejecuta un Full Table Scan: lee todas las páginas de la tabla aunque la mayoría no contengan filas que cumplan la condición.

-- Full Table Scan: lectura de TODAS las páginas
SELECT * FROM usuarios WHERE email = 'abc@mail.com';

Full Table Scan: Operación de base de datos donde el motor lee cada una de las filas de una tabla, de principio a fin, para buscar los datos que cumplen con una condición.


Cómo un índice ordena el acceso

Un índice mantiene los valores de la columna indexada en orden. Al buscar por email, el motor localiza la posición exacta sin leer toda la tabla, y accede solo a las páginas que necesita.

-- Búsqueda con índice: acceso al B-Tree + páginas específicas
SELECT * FROM usuarios WHERE email = 'abc@mail.com';

El recorrido de las hojas del índice es secuencial. Luego accede a las páginas de datos. Si el índice contiene todas las columnas que necesita la consulta (index-only scan), ni siquiera toca la tabla:

-- Index-only scan: el índice contiene todos los datos necesarios
SELECT email, nombre FROM usuarios WHERE email LIKE 'abc%';
Nota:

Un índice reduce el acceso aleatorio, pero no lo elimina. El recorrido del índice es secuencial, pero el salto a las páginas de datos sigue siendo aleatorio si no están ordenadas por la misma columna.


Cuándo priorizar cada tipo de acceso

Enfoque Ventaja Desventaja
Acceso secuencial Rápido Máxima velocidad de transferencia: los datos se leen en bloque sin pausas Rígido Requiere datos ordenados o un índice que los organice
Acceso aleatorio Preciso Útil para búsquedas puntuales (una fila por clave primaria) Lento Cada salto requiere una operación de E/S independiente
Situación Recomendación
Reporte que recorre todas las filas por rango de fecha Índice por fecha; el orden físico del índice coincide con el orden de consulta
Búsqueda exacta por email Índice en email; el costo del salto aleatorio se paga una sola vez
LIKE '%texto' (wildcard inicial) No usa índice; considerar búsqueda textual
Tabla pequeña que entra completamente en RAM Depende; el buffer pool reduce la diferencia; Full Table Scan puede ser aceptable

Errores frecuentes

Error: con SSD no hay diferencia entre acceso secuencial y aleatorio.

Falso. Un SSD es ~12x más lento en acceso aleatorio. La diferencia es menor que en HDD (~100x), pero sigue siendo relevante en operaciones por segundo (IOPS).


Error: agregar un índice siempre elimina el acceso aleatorio.

No. El índice se recorre secuencialmente, pero acceder a las páginas de datos puede requerir saltos aleatorios si el índice no cubre todas las columnas.

Autoevaluación: Acceso Secuencial vs Aleatorio

1/3