Choisir les index pour les séries temporelles
Choisissez les bons index pour les charges de travail de séries temporelles — un index composite (device_id, ts DESC) couvre le modèle courant.
Choisir les index pour les séries temporelles est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
La requête courante sur les séries temporelles
« Données récentes pour une entité » :
SELECT * FROM metrics
WHERE device_id = 42
AND ts >= NOW() - INTERVAL '24 hours'
ORDER BY ts DESC LIMIT 1000;Index composite (device_id, ts DESC)
L’index de référence pour les séries temporelles :
CREATE INDEX metrics_device_ts_idx
ON metrics (device_id, ts DESC);
-- Equality on device_id, range + sort on ts: index handles both.Pourquoi l’ordre est important
- (device_id, ts) — idéal pour « cet appareil, données récentes »
- (ts, device_id) — idéal pour « cet instant, tous les appareils »
Choisissez selon la combinaison de requêtes.
BRIN pour les tables en ajout uniquement
BRIN est minuscule : quelques MB pour une table d’un milliard de lignes. Il n’est efficace que lorsque les données sont physiquement triées selon la colonne indexée (ce qui est généralement le cas des séries temporelles) :
CREATE INDEX metrics_ts_brin ON metrics USING BRIN (ts);
-- Excellent for "give me last 24 hours" on append-only tables.Arbre B ou BRIN
- Arbre B — recherches en quelques millisecondes par identifiant exact ; recherches selon une date récente
- BRIN — parcours rapides de plages sur des données monotones ; maintenance peu coûteuse
Vous pouvez les combiner : un arbre B sur (device_id), BRIN sur (ts).
Index des hypertables
TimescaleDB propage les index à tous les blocs. Supprimez les index inutilisés : ils ont un coût sur chaque bloc.
Index partiels pour les sous-ensembles fréquemment consultés
Si 99 % des requêtes portent sur les données récentes :
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.Éviter les fonctions sur la colonne indexée
N’appliquez pas de fonctions à la colonne indexée : cela empêche l’utilisation de l’index :
-- BAD:
WHERE date_trunc('hour', ts) = $1
-- GOOD:
WHERE ts >= $1 AND ts < $1 + INTERVAL '1 hour'Index pour les requêtes sur la dernière ligne
Pour « la dernière mesure de chaque appareil », le bon index transforme la requête en parcours d’une plage d’index :
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.CLUSTER selon l’ordre fréquemment consulté
CLUSTER réordonne physiquement la table selon un index. Il s’agit d’une opération unique ; les nouvelles données sont toujours ajoutées dans leur ordre d’arrivée :
CLUSTER metrics USING metrics_device_ts_idx;
-- Cluster is heavy. TimescaleDB chunks help by keeping recent chunks small.Index de hachage pour les égalités à forte cardinalité
Il est rarement utilisé pour les séries temporelles, mais il existe. Un arbre B sur device_id suffit généralement.
N’indexez pas à outrance
Les tables de séries temporelles sont fortement sollicitées en écriture. Chaque index amplifie les écritures. Ajoutez uniquement ce que vous interrogez.
Récapitulatif
L’indexation des séries temporelles repose sur un petit nombre de schémas.
- Composite (entité, ts DESC) pour les requêtes par entité
- BRIN sur ts pour les requêtes de plages en ajout uniquement
- Hypertables : les index sont propagés aux blocs
- Évitez les prédicats appliquant une fonction à une colonne
Vérification rapide
Votre requête de séries temporelles la plus fréquente filtre par device_id et lit les dernières 24 heures. Quel est le meilleur index ?
Questions Fréquemment Posées
La leçon « Choisir les index pour les séries temporelles » est-elle gratuite ?
Oui — le texte complet de « Choisir les index pour les séries temporelles » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Choisir les index pour les séries temporelles » ?
Choisissez les bons index pour les charges de travail de séries temporelles — un index composite (device_id, ts DESC) couvre le modèle courant. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Choisir les index pour les séries temporelles » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Tables hypertables TimescaleDB
- Agrégats continus
- Politiques de compression et de rétention
- Choisir les index pour les séries temporelles