Qué es el almacenamiento por columnas
El almacenamiento por columnas guarda juntos todos los valores de una misma columna. Una consulta que suma una columna lee solo esa columna y no el resto de la tabla.
Una papelería con tres tiendas guarda millones de ventas. La dueña pregunta cuántas unidades vendió en total. Para contestar no hace falta saber quién compró ni qué producto era.
Al terminar esta lección
Nota
Puedo explicar por qué una consulta analítica lee una tabla de otra manera que una búsqueda puntual.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Búsqueda puntual | una pregunta que busca una fila concreta | |
| Consulta analítica | una pregunta que resume muchas filas | |
| Almacenamiento por filas | guarda juntos los valores de una misma fila | |
| Almacenamiento por columnas | guarda juntos los valores de una misma columna | |
| Agregado | una función que convierte muchas filas en un valor | SUM(units) |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Búsqueda puntual frente a consulta analítica
Una búsqueda puntual pide una fila: la venta número 7. Toca pocas filas y casi todas sus columnas.
Una consulta analítica pide un resumen: las unidades vendidas en el mes. Toca muchas filas, pero solo una o dos columnas.
Las dos se escriben en SQL. Lo que cambia es cuánto de la tabla hay que leer.
Ejemplo resuelto: qué toca cada pregunta
| Pregunta | Filas que toca | Columnas que toca | Tipo |
|---|---|---|---|
| ¿Qué venta tiene el número 7? | 1 | Las 7 de la tabla | Búsqueda puntual |
| ¿Cuántas unidades se vendieron? | Las 12 | 1 (units) | Consulta analítica |
| ¿Cuánto dinero se facturó? | Las 12 | 2 (units y unit_price) | Consulta analítica |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pruébalo: una búsqueda puntual
-- Una búsqueda puntual: una fila y todas sus columnas.
select * from sales where sale_id = 7;
-- Cambia 7 por 3 y pulsa Run.Leer solo las columnas que la consulta nombra
Una tabla puede guardarse por filas: cada venta entera, una detrás de otra. Es cómodo para leer una venta completa.
También puede guardarse por columnas: primero todos los sale_id, luego todos los units, y así. Es cómodo para sumar una columna.
DuckDB guarda por columnas. Una suma de units no lee shop ni product.
Ejemplo resuelto: una tabla de dos maneras
| Almacenamiento | Cómo queda guardado (tres ventas, tres columnas) | Bueno para |
|---|---|---|
| Por filas | 1 Centro 3 | 2 Centro 10 | 3 Norte 2 | Leer una venta entera |
| Por columnas | sale_id: 1 2 3 | shop: Centro Centro Norte | units: 3 10 2 | Sumar o contar una columna |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pruébalo: sumar una o dos columnas
-- Dos columnas: el dinero de todas las ventas.
select sum(units * unit_price) as revenue from sales;
-- Cambia la suma para obtener solo sum(units) y pulsa Run.Un agregado resume una columna entera
Un agregado recorre una columna y devuelve un valor. COUNT cuenta filas, SUM suma, MIN y MAX dan los extremos y AVG la media.
Si la consulta solo tiene agregados, el resultado es una fila.
Escribe el nombre de las columnas que necesitas. Evita SELECT * cuando resumes.
Pruébalo: resumir las unidades
-- Un resumen de una sola columna: las unidades por venta.
select min(units) as fewest, max(units) as most, avg(units) as typical
from sales;
-- Cambia units por sale_id y mira qué pasa.Un error frecuente
Advertencia
Mucha gente cree que SELECT * sale gratis porque el resultado se ve igual. En una tabla por columnas, el asterisco obliga a leer todas las columnas. Nombra solo las que necesitas.