0Pricing
SQL Academy · บทเรียน

การเลือกดัชนีสำหรับอนุกรมเวลา

เลือกดัชนีที่เหมาะกับภาระงานอนุกรมเวลา — ดัชนีแบบผสม (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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตารางไฮเปอร์ของ TimescaleDB
  2. การรวมข้อมูลแบบต่อเนื่อง
  3. นโยบายการบีบอัดและการเก็บรักษา
  4. การเลือกดัชนีสำหรับอนุกรมเวลา
← กลับไปที่ SQL Academy