يتضمن كل قسم أمثلة باستخدام بيانات نموذجية، ويوضح كيفية التحقق من استخدام الفهرس أثناء تنفيذ الاستعلام.
فهرس MinMax
minmax الأنسب لشروط النطاق على البيانات ذات الترتيب غير المحكم أو على الأعمدة المرتبطة بـ ORDER BY.
EXPLAIN واستبعاد البيانات غير اللازمة.
فهرس Set
set عندما يكون عدد القيم المميّزة محليًا (في كل كتلة) منخفضًا؛ ولا يكون مفيدًا إذا كانت كل كتلة تحتوي على عدد كبير من القيم المميّزة.
الفهرس النصي (text) للبحث النصي الكامل
text هو فهرس معكوس للبيانات النصية المُجزأة إلى رموز.
وقد صُمم خصيصًا لأعباء عمل البحث النصي الكامل، مما يتيح بحثًا فعّالًا وحتميًا عن الرموز والمصطلحات.
ويُوصى به لحالات استخدام اللغة الطبيعية أو البحث النصي على نطاق واسع.
راجع البحث النصي الكامل باستخدام الفهارس النصية لمزيد من التفاصيل والأمثلة.
مرشح Bloom عام (قيَمي)
bloom_filter مناسبًا لعمليات المساواة والتحقق من العضوية باستخدام IN في حالات “البحث عن إبرة في كومة قش”. ويقبل معلمة اختيارية تمثل معدل النتائج الإيجابية الكاذبة (الافتراضي 0.025).
مرشح Bloom لـ N-gram (ngrambf_v1) للبحث عن السلاسل الفرعية (مهمل)
تم إهمال استخدام الفهارس
ngrambf_v1 للبحث النصي الكامل في إصدارات ClickHouse >= 26.2 لصالح فهارس text (راجع هنا لمزيد من التفاصيل).ngrambf_v1 السلاسل النصية إلى n-grams. ويعمل بكفاءة مع الاستعلامات LIKE '%...%'. كما يدعم String/FixedString/Map (عبر mapKeys/mapValues)، بالإضافة إلى إمكانية ضبط الحجم وعدد دوال hash والبذرة. راجع وثائق مرشح Bloom لـ N-gram لمزيد من التفاصيل.
ngrambf_v1 الأربع (حجم n-gram، وحجم bitmap، ودوال hash، وseed) تأثيرًا كبيرًا في الأداء واستهلاك الذاكرة. استخدم هذه الدوال لحساب الحجم الأمثل لـ bitmap وعدد دوال hash استنادًا إلى حجم n-gram المتوقع ومعدل الإيجابيات الكاذبة المطلوب:
مرشح Bloom للرموز (tokenbf_v1) للبحث المستند إلى الكلمات (مهمل)
أصبح استخدام فهارس
tokenbf_v1 في البحث النصي الكامل مهملًا في إصدارات ClickHouse >= 26.2 لصالح فهارس text (راجع هنا لمزيد من التفاصيل).tokenbf_v1 الرموز المفصولة بمحارف غير حرفية رقمية. ينبغي استخدامه مع hasToken، أو أنماط الكلمات في LIKE، أو equals/IN. وهو يدعم الأنواع String/FixedString/Map.
راجع صفحتي مرشح Bloom للرموز وأنواع مرشح Bloom لمزيد من التفاصيل.
token مقابل ngram هنا.
أضِف الفهارس أثناء CREATE TABLE (أمثلة متعددة)
Map/Tuple/Nested. ويوضح المثال أدناه ذلك:
تطبيق MATERIALIZE على البيانات الموجودة والتحقق
MATERIALIZE، وفحص الاستبعاد باستخدام EXPLAIN أو سجلات التتبّع، كما هو موضح أدناه:
متى تستخدم فهارس التخطي ومتى تتجنبها
- تكون قيم التصفية متفرقة داخل كتل البيانات
- يوجد ارتباط قوي بأعمدة
ORDER BY، أو تؤدي أنماط إدخال البيانات إلى تجميع القيم المتشابهة معًا - إجراء عمليات بحث نصي في مجموعات بيانات سجلات كبيرة (النوعان
ngrambf_v1/tokenbf_v1)
- يُرجَّح أن تحتوي معظم الكتل على قيمة مطابقة واحدة على الأقل (وسيتم قراءة الكتل في جميع الأحوال)
- التصفية على أعمدة ذات كاردينالية عالية من دون أي ارتباط بترتيب البيانات
اعتبارات مهمةإذا ظهرت قيمة ولو مرة واحدة فقط في كتلة بيانات، فسيتعين على ClickHouse قراءة الكتلة بالكامل. اختبر الفهارس باستخدام مجموعات بيانات واقعية، واضبط درجة التحبيب والمعلمات الخاصة بالنوع استنادًا إلى قياسات الأداء الفعلية.
تجاهل الفهارس أو فرض استخدامها مؤقتًا
ignore_data_skipping_indices.
ملاحظات ومحاذير
- لا تُدعَم فهارس التخطي إلا في جداول عائلة MergeTree؛ ويتم الاستبعاد على مستوى الحبيبات/الكتل.
- الفهارس المعتمدة على مرشحات Bloom احتمالية (فالنتائج الإيجابية الكاذبة تؤدي إلى قراءات إضافية، لكنها لا تتسبب في تخطي بيانات صالحة).
- ينبغي التحقق من مرشحات Bloom وفهارس التخطي الأخرى باستخدام
EXPLAINوالتتبّع؛ واضبط درجة التحبيب لتحقيق توازن بين الاستبعاد وحجم الفهرس.