اختيار فهارس السلاسل الزمنية
اختر الفهارس المناسبة لأحمال عمل السلاسل الزمنية — فالفهرس المركب (device_id, ts DESC) يغطي النمط الشائع
اختيار فهارس السلاسل الزمنية درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 صغير جدًا — بضع ميغابايتات لجدول يحتوي على مليار صف. ولا يكون فعالًا إلا عندما تكون البيانات مرتبة فعليًا حسب العمود المفهرس، وهو ما يحدث عادةً في السلاسل الزمنية:
CREATE INDEX metrics_ts_brin ON metrics USING BRIN (ts);
-- Excellent for "give me last 24 hours" on append-only tables.B-tree مقابل BRIN
- B-tree — عمليات بحث تستغرق ميلي ثانية باستخدام المعرّف الدقيق، وعمليات بحث باستخدام الوقت الحديث
- BRIN — عمليات مسح سريعة لنطاقات البيانات الرتيبة، وتكلفة صيانة منخفضة
يمكنك الجمع بينهما: استخدم B-tree على (device_id)، وBRIN على (ts).
فهارس Hypertable
ينشر 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.Hash Index للمساواة مع كثافة قيم عالية
نادرًا ما يُستخدم مع السلاسل الزمنية، لكنه متاح. ويكون B-tree على device_id كافيًا عادةً.
لا تفرط في إنشاء الفهارس
تتسم جداول السلاسل الزمنية بكثرة عمليات الكتابة. كل فهرس يعني تضخيمًا لعمليات الكتابة. أضف الفهارس التي تستعلم عنها فقط.
خلاصة
فهرسة السلاسل الزمنية عبارة عن مجموعة صغيرة من الأنماط.
- الفهرس المركب (entity, ts DESC) للاستعلامات الخاصة بكل كيان
- BRIN على ts لاستعلامات النطاق في الجداول ذات الإضافة فقط
- في Hypertables: تنتشر الفهارس إلى الأجزاء
- تجنّب الشروط التي تطبّق دوال على الأعمدة
اختبار سريع
أكثر استعلامات السلاسل الزمنية استخدامًا لديك يصفّي النتائج حسب device_id ويقرأ آخر 24 ساعة. ما أفضل فهرس؟
الأسئلة الشائعة
هل درس «اختيار فهارس السلاسل الزمنية» مجاني؟
نعم — نص درس «اختيار فهارس السلاسل الزمنية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «اختيار فهارس السلاسل الزمنية»؟
اختر الفهارس المناسبة لأحمال عمل السلاسل الزمنية — فالفهرس المركب (device_id, ts DESC) يغطي النمط الشائع تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «اختيار فهارس السلاسل الزمنية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- جداول TimescaleDB فائقة التقسيم
- التجميعات المستمرة
- سياسات الضغط والاحتفاظ
- اختيار فهارس السلاسل الزمنية