Elección de índices para series temporales
Elija los índices adecuados para cargas de trabajo de series temporales; el índice compuesto (device_id, ts DESC) cubre el patrón habitual.
Elección de índices para series temporales es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
La consulta habitual de series temporales
«Datos recientes de una entidad»:
SELECT * FROM metrics
WHERE device_id = 42
AND ts >= NOW() - INTERVAL '24 hours'
ORDER BY ts DESC LIMIT 1000;Índice compuesto (device_id, ts DESC)
El índice canónico para series temporales:
CREATE INDEX metrics_device_ts_idx
ON metrics (device_id, ts DESC);
-- Equality on device_id, range + sort on ts: index handles both.Por qué importa el orden
- (device_id, ts): ideal para «los datos recientes de este dispositivo»
- (ts, device_id): ideal para «todos los dispositivos en este momento»
Elija según la combinación de consultas.
BRIN para tablas de solo inserción
BRIN ocupa muy poco: unos pocos MB para una tabla de mil millones de filas. Solo es eficaz cuando los datos están ordenados físicamente por la columna indexada, como suele ocurrir con las series temporales:
CREATE INDEX metrics_ts_brin ON metrics USING BRIN (ts);
-- Excellent for "give me last 24 hours" on append-only tables.B-tree frente a BRIN
- B-tree: búsquedas en milisegundos por id exacto y búsquedas por tiempo reciente
- BRIN: análisis rápidos de rangos sobre datos monótonos y mantenimiento económico
Puede combinarlos: B-tree en (device_id) y BRIN en (ts).
Índices de hypertables
TimescaleDB propaga los índices a todos los chunks. Elimine los índices que no utilice: tienen un coste en cada chunk.
Índices parciales para subconjuntos activos
Si el 99 % de las consultas accede a datos recientes:
CREATE INDEX metrics_recent_idx
ON metrics (device_id, ts DESC)
WHERE ts >= NOW() - INTERVAL '7 days';
-- Issue: predicate must use literal date or be re-created periodically.Evitar funciones en la columna indexada
No aplique funciones a la columna indexada: impide utilizar el índice:
-- BAD:
WHERE date_trunc('hour', ts) = $1
-- GOOD:
WHERE ts >= $1 AND ts < $1 + INTERVAL '1 hour'Índice para consultas de la última fila
Para obtener «la lectura más reciente de cada dispositivo», el índice adecuado convierte la consulta en un análisis de rango del índice:
CREATE INDEX metrics_device_ts_idx ON metrics (device_id, ts DESC);
SELECT DISTINCT ON (device_id) device_id, ts, value
FROM metrics
ORDER BY device_id, ts DESC;
-- Uses the index to take the first row per device.Agrupar según el orden de acceso frecuente
CLUSTER reordena físicamente la tabla según un índice. Es una operación puntual; los datos nuevos siguen añadiéndose en el orden de llegada:
CLUSTER metrics USING metrics_device_ts_idx;
-- Cluster is heavy. TimescaleDB chunks help by keeping recent chunks small.Índice hash para igualdades de alta cardinalidad
Rara vez se utiliza en series temporales, pero existe. Normalmente, un B-tree en device_id es suficiente.
No cree demasiados índices
Las tablas de series temporales reciben muchas escrituras. Cada índice implica amplificación de escritura. Añada únicamente los índices que utilice en sus consultas.
Resumen
La indexación de series temporales se basa en un conjunto reducido de patrones.
- (entidad, ts DESC) compuesto para consultas por entidad
- BRIN en ts para consultas de rangos en tablas de solo inserción
- En las hypertables, los índices se propagan a los chunks
- Evite predicados que apliquen funciones a columnas
Comprobación rápida
Su consulta de series temporales más frecuente filtra por device_id y lee las últimas 24 horas. ¿Cuál es el mejor índice?
Preguntas frecuentes
¿La lección «Elección de índices para series temporales» es gratis?
Sí — el texto completo de «Elección de índices para series temporales» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Elección de índices para series temporales»?
Elija los índices adecuados para cargas de trabajo de series temporales; el índice compuesto (device_id, ts DESC) cubre el patrón habitual. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Elección de índices para series temporales»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Hypertables de TimescaleDB
- Agregados continuos
- Políticas de compresión y retención
- Elección de índices para series temporales