การเลือกดัชนีสำหรับอนุกรมเวลา
เลือกดัชนีที่เหมาะกับภาระงานอนุกรมเวลา — ดัชนีแบบผสม (device_id, ts DESC) รองรับรูปแบบที่ใช้กันทั่วไป
การเลือกดัชนีสำหรับอนุกรมเวลา เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คิวรีอนุกรมเวลาที่ใช้กันทั่วไป
"ข้อมูลล่าสุดของเอนทิตีหนึ่งรายการ":
SELECT * FROM metrics
WHERE device_id = 42
AND ts >= NOW() - INTERVAL '24 hours'
ORDER BY ts DESC LIMIT 1000;ดัชนีแบบผสม (device_id, ts DESC)
ดัชนีมาตรฐานสำหรับข้อมูลอนุกรมเวลา:
CREATE INDEX metrics_device_ts_idx
ON metrics (device_id, ts DESC);
-- Equality on device_id, range + sort on ts: index handles both.เหตุใดลำดับจึงสำคัญ
- (device_id, ts) — เหมาะที่สุดสำหรับ "อุปกรณ์นี้ ข้อมูลล่าสุด"
- (ts, device_id) — เหมาะที่สุดสำหรับ "เวลานี้ อุปกรณ์ทั้งหมด"
เลือกตามลักษณะการใช้งานคิวรี
BRIN สำหรับตารางที่เพิ่มข้อมูลต่อท้ายเท่านั้น
BRIN มีขนาดเล็กมาก — เพียงไม่กี่ MB สำหรับตารางที่มีพันล้านแถว และจะมีประสิทธิภาพก็ต่อเมื่อข้อมูลเรียงลำดับทางกายภาพตามคอลัมน์ที่ทำดัชนี ซึ่งโดยปกติข้อมูลอนุกรมเวลาจะเป็นเช่นนั้น:
CREATE INDEX metrics_ts_brin ON metrics USING BRIN (ts);
-- Excellent for "give me last 24 hours" on append-only tables.ต้นไม้แบบ B เทียบกับ BRIN
- ต้นไม้แบบ B — ค้นหาด้วยรหัสที่ตรงกันทุกประการได้ในระดับมิลลิวินาที และค้นหาตามเวลาล่าสุดได้
- BRIN — สแกนช่วงข้อมูลที่เพิ่มขึ้นตามลำดับได้รวดเร็ว และดูแลรักษาได้ประหยัด
คุณสามารถใช้ร่วมกันได้: ใช้ต้นไม้แบบ B กับ (device_id) และใช้ BRIN กับ (ts)
ดัชนีของตารางไฮเปอร์
TimescaleDB จะเผยแพร่ดัชนีไปยังทุกส่วนข้อมูล ลบดัชนีที่ไม่ได้ใช้งาน เพราะดัชนีเหล่านี้มีต้นทุนกับทุกส่วนข้อมูล
ดัชนีบางส่วนสำหรับชุดข้อมูลที่ใช้งานบ่อย
หาก 99% ของคิวรีเข้าถึงข้อมูลล่าสุด:
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.หลีกเลี่ยงการใช้ฟังก์ชันกับคอลัมน์ดัชนี
อย่าใช้ฟังก์ชันกับคอลัมน์ที่ทำดัชนี เพราะจะทำให้ไม่สามารถใช้ดัชนีได้:
-- BAD:
WHERE date_trunc('hour', ts) = $1
-- GOOD:
WHERE ts >= $1 AND ts < $1 + INTERVAL '1 hour'ดัชนีสำหรับคิวรีแถวล่าสุด
สำหรับ "ค่าที่อ่านล่าสุดของอุปกรณ์แต่ละเครื่อง" ดัชนีที่เหมาะสมจะเปลี่ยนคิวรีให้เป็นการสแกนช่วงของดัชนี:
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 จะเรียงลำดับตารางทางกายภาพใหม่ตามดัชนี เป็นการดำเนินการครั้งเดียว ส่วนข้อมูลใหม่ยังคงถูกเพิ่มตามลำดับที่มาถึง:
CLUSTER metrics USING metrics_device_ts_idx;
-- Cluster is heavy. TimescaleDB chunks help by keeping recent chunks small.ดัชนีแฮชสำหรับการเทียบค่าที่มีค่าหลากหลายสูง
แทบไม่ใช้กับข้อมูลอนุกรมเวลา แต่มีไว้ให้ใช้ ต้นไม้แบบ B บน device_id มักเพียงพอแล้ว
อย่าสร้างดัชนีมากเกินไป
ตารางอนุกรมเวลามีการเขียนข้อมูลเป็นหลัก ดัชนีทุกตัวทำให้ปริมาณการเขียนเพิ่มขึ้น จึงควรเพิ่มเฉพาะสิ่งที่คุณใช้ค้นข้อมูล
สรุปทบทวน
การสร้างดัชนีสำหรับข้อมูลอนุกรมเวลามีรูปแบบหลักอยู่ไม่กี่แบบ
- ดัชนีแบบผสม (เอนทิตี, ts DESC) สำหรับคิวรีแยกตามเอนทิตี
- BRIN บน ts สำหรับคิวรีช่วงข้อมูลที่เพิ่มต่อท้ายเท่านั้น
- ตารางไฮเปอร์: ดัชนีจะเผยแพร่ไปยังส่วนข้อมูล
- หลีกเลี่ยงเงื่อนไขที่ใช้ฟังก์ชันกับคอลัมน์
ตรวจสอบอย่างรวดเร็ว
คิวรีอนุกรมเวลาที่ใช้งานบ่อยที่สุดของคุณกรองด้วย device_id และอ่านข้อมูลย้อนหลัง 24 ชั่วโมง ดัชนีใดเหมาะที่สุด
คำถามที่พบบ่อย
บทเรียน “การเลือกดัชนีสำหรับอนุกรมเวลา” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเลือกดัชนีสำหรับอนุกรมเวลา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเลือกดัชนีสำหรับอนุกรมเวลา”
เลือกดัชนีที่เหมาะกับภาระงานอนุกรมเวลา — ดัชนีแบบผสม (device_id, ts DESC) รองรับรูปแบบที่ใช้กันทั่วไป คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การเลือกดัชนีสำหรับอนุกรมเวลา” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตารางไฮเปอร์ของ TimescaleDB
- การรวมข้อมูลแบบต่อเนื่อง
- นโยบายการบีบอัดและการเก็บรักษา
- การเลือกดัชนีสำหรับอนุกรมเวลา