Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/05/2012, 18:01
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Modelo de datos: ¿muchas columnas o muchos registros?

En estos casos puedes separar el análisis en tres partes, almacenamiento, rendimiento y código sql, es decir:

1. Almacenamiento.

1.1. El espacio final de la tabla será aproximadamente el mismo teniendo los datos en columnas o en filas, por aquí no hay mucho para hacer.

1.2. Almacenar los datos en columnas genera filas de mayor tamaño, por lo que tendrás que definir un tamaño de bloque mayor al estándar (8k) para evitar filas anidadas o migradas, esto puede ser un poco molesto en ciertas tareas administrativas (export / import, backups, etc), y también puede afectar el rendimiento, piensa que un bloque es la unidad mínima que gestiona el motor para las operaciones de lectura y escritura, y no es lo mismo subir a memoria un bloque de 32k que un bloque de 8k.

1.3. Almacenar los datos en filas genera índices de mayor tamaño, pero es más eficiente para implementar técnicas como particionamiento de tablas, y también para alocar o liberar espacio durante el proceso de carga o depuración de datos.

2. Rendimiento.

2.1. Almacenar los datos en columnas favorece el rendimiento si por cada fila se leen o modifican la mayoría de las columnas, si la cantidad de filas que se leen o modifican en cada consulta es baja, o si reduce la cardinalidad de las columnas utilizadas en el where y la mayoría de las consultas son por rangos pequeños (where id=1 o where id between 1 and 10).

2.2. Almacenar los datos en filas favorece el rendimiento si por cada fila se leen o modifican la minoría de las columnas, si la cantidad de filas que se leen o modifican en cada consulta es alta, o si la mayoría de las consultas son por rangos grandes (where id between 1 and 1000).

3. Código SQL, aquí no hay mucho que analizar, almacenar los datos en columnas siempre requiere de mayor cantidad de consultas, excepto el caso de select * from tabla.

Saludos