Pilihan Indeks Deret Waktu
Pilih indeks yang tepat untuk beban kerja deret waktu — komposit (device_id, ts DESC) mencakup pola umum
Pilihan Indeks Deret Waktu adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Kueri Deret Waktu yang Umum
"Data terbaru untuk satu entitas":
SELECT * FROM metrics
WHERE device_id = 42
AND ts >= NOW() - INTERVAL '24 hours'
ORDER BY ts DESC LIMIT 1000;Indeks Komposit (device_id, ts DESC)
Indeks standar untuk deret waktu:
CREATE INDEX metrics_device_ts_idx
ON metrics (device_id, ts DESC);
-- Equality on device_id, range + sort on ts: index handles both.Mengapa Urutan Penting
- (device_id, ts) — terbaik untuk "perangkat ini, data terbaru"
- (ts, device_id) — terbaik untuk "waktu ini, semua perangkat"
Pilih berdasarkan campuran kueri.
BRIN untuk Tabel Hanya-Tambah
BRIN berukuran sangat kecil — hanya beberapa MB untuk tabel dengan satu miliar baris. BRIN hanya efektif ketika data diurutkan secara fisik berdasarkan kolom yang diindeks (yang biasanya berlaku untuk deret waktu):
CREATE INDEX metrics_ts_brin ON metrics USING BRIN (ts);
-- Excellent for "give me last 24 hours" on append-only tables.B-tree vs BRIN
- B-tree — pencarian dalam milidetik berdasarkan id yang tepat; pencarian berdasarkan waktu terbaru
- BRIN — pemindaian rentang yang cepat pada data monotonik; murah untuk dipelihara
Anda dapat menggabungkannya: B-tree pada (device_id), BRIN pada (ts).
Indeks Hypertable
TimescaleDB meneruskan indeks ke semua chunk. Hapus indeks yang tidak digunakan — setiap indeks menambah biaya pada setiap chunk.
Indeks Parsial untuk Subset Aktif
Jika 99% kueri mengakses data terbaru:
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.Hindari Fungsi pada Kolom Indeks
Jangan menerapkan fungsi pada kolom yang diindeks — hal ini membuat indeks tidak dapat digunakan:
-- BAD:
WHERE date_trunc('hour', ts) = $1
-- GOOD:
WHERE ts >= $1 AND ts < $1 + INTERVAL '1 hour'Indeks untuk Kueri Baris Terbaru
Untuk "pembacaan terbaru per perangkat", indeks yang tepat mengubah kueri menjadi pemindaian rentang indeks:
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 pada Urutan Aktif
CLUSTER mengurutkan ulang tabel secara fisik berdasarkan sebuah indeks. Operasi ini hanya dilakukan sekali; data baru tetap ditambahkan sesuai urutan kedatangan:
CLUSTER metrics USING metrics_device_ts_idx;
-- Cluster is heavy. TimescaleDB chunks help by keeping recent chunks small.Indeks Hash untuk Kesetaraan Berkardinalitas Tinggi
Jarang digunakan untuk deret waktu, tetapi tersedia. B-tree pada device_id biasanya sudah cukup.
Jangan Membuat Terlalu Banyak Indeks
Tabel deret waktu banyak melakukan penulisan. Setiap indeks = amplifikasi penulisan. Tambahkan hanya indeks yang digunakan untuk kueri.
Ringkasan
Pengindeksan deret waktu menggunakan sejumlah kecil pola.
- Komposit (entitas, ts DESC) untuk kueri per entitas
- BRIN pada ts untuk kueri rentang pada tabel hanya-tambah
- Hypertable: indeks diteruskan ke chunk
- Hindari predikat berupa fungsi pada kolom
Pemeriksaan Singkat
Kueri deret waktu yang paling sering Anda jalankan memfilter berdasarkan device_id dan membaca 24 jam terakhir. Apa indeks terbaiknya?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pilihan Indeks Deret Waktu” gratis?
Ya — teks lengkap “Pilihan Indeks Deret Waktu” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pilihan Indeks Deret Waktu”?
Pilih indeks yang tepat untuk beban kerja deret waktu — komposit (device_id, ts DESC) mencakup pola umum Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pilihan Indeks Deret Waktu” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Hypertable TimescaleDB
- Agregat Kontinu
- Kebijakan Kompresi dan Retensi
- Pilihan Indeks Deret Waktu