optimize_aggregators_of_group_by_keys
يزيل دوال التجميع min/max/any/anyLast لمفاتيح GROUP BY في قسم SELECToptimize_append_index
استخدم القيود لإضافة شرط الفهرس. القيمة الافتراضية هيfalse.
القيم الممكنة:
- true, false
optimize_arithmetic_operations_in_aggregate_functions
نقل العمليات الحسابية خارج دوال التجميعoptimize_const_name_size
الاستعاضة بـ scalar واستخدام hash اسمًا للثوابت الكبيرة (يُقدَّر الحجم بطول الاسم). القيم الممكنة:- عدد صحيح موجب - الحد الأقصى لطول الاسم،
- 0 — دائمًا،
- عدد صحيح سالب - أبدًا.
optimize_count_from_files
يُمكّن أو يعطّل تحسين احتساب عدد الصفوف من الملفات بتنسيقات إدخال مختلفة. وينطبق ذلك على دوال/محركات الجداولfile/s3/url/hdfs/azureBlobStorage.
القيم الممكنة:
- 0 — التحسين معطّل.
- 1 — التحسين مُمكّن.
optimize_dictget_tuple_element
أعِد كتابةtupleElement(dictGet('dict', ('a', 'b', 'c'), key), 2) إلى dictGet('dict', 'b', key) لتجنّب جلب سمات القاموس غير الضرورية. يدعم الوصول الموضعي (.1, .2, …) والمُسمّى (.b)، ويَنطبق أيضًا على dictGetOrDefault عندما تكون وسيطة القيمة الافتراضية Tuple ثابتة أو tuple(...) مكوّنة من ثوابت.
optimize_distinct_in_order
فعِّل تحسين DISTINCT إذا كانت بعض الأعمدة فيه تُشكّل بادئة للفرز. على سبيل المثال، بادئة مفتاح الفرز في MergeTree أو في عبارة ORDER BYoptimize_distributed_group_by_sharding_key
يعمل على تحسين استعلاماتGROUP BY sharding_key عبر تجنّب تنفيذ تجميع مكلف على الخادم البادئ، مما يقلّل استخدام الذاكرة للاستعلام على هذا الخادم.
الأنواع التالية من الاستعلامات مدعومة (بما في ذلك جميع التركيبات بينها):
SELECT DISTINCT [..., ]sharding_key[, ...] FROM distSELECT ... FROM dist GROUP BY sharding_key[, ...]SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY xSELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
SELECT ... GROUP BY sharding_key[, ...] WITH TOTALSSELECT ... GROUP BY sharding_key[, ...] WITH ROLLUPSELECT ... GROUP BY sharding_key[, ...] WITH CUBESELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
- 0 — معطّل.
- 1 — مفعّل.
في الوقت الحالي، يتطلب هذا الخيار
optimize_skip_unused_shards (والسبب هو أنه قد يُفعَّل افتراضيًا في المستقبل، ولن يعمل بشكل صحيح إلا إذا أُدرجت البيانات عبر جدول Distributed، أي إذا كانت البيانات موزعة وفقًا لـ sharding_key).optimize_dry_run_check_part
عند التفعيل، يتحققOPTIMIZE ... DRY RUN من الجزء المدمج الناتج باستخدام checkDataPart. وإذا أخفق التحقق، يُطلَق استثناء.
optimize_empty_string_comparisons
حوِّل تعبيرات مثلcol = '' أو '' = col إلى empty(col)، وcol != '' أو '' != col إلى notEmpty(col)،
وذلك فقط عندما يكون col من النوع String أو FixedString.
optimize_extract_common_expressions
يسمح باستخراج التعبيرات المشتركة من حالات OR في تعبيرات WHERE وPREWHERE وON وHAVING وQUALIFY. على سبيل المثال، يمكن إعادة كتابة تعبير منطقي مثل(A AND B) OR (A AND C) إلى A AND (B OR C)، مما قد يساعد على الاستفادة من:
- الفهارس في تعبيرات التصفية البسيطة
- تحسين تحويل CROSS JOIN إلى INNER JOIN
optimize_functions_to_subcolumns
يُمكّن هذا الإعداد التحسين أو يعطّله عبر تحويل بعض الدوال بحيث تقرأ الأعمدة الفرعية، مما يقلل كمية البيانات المطلوب قراءتها. يمكن تحويل هذه الدوال:- length لقراءة العمود الفرعي size0.
- empty لقراءة العمود الفرعي size0.
- notEmpty لقراءة العمود الفرعي size0.
- isNull لقراءة العمود الفرعي null.
- isNotNull لقراءة العمود الفرعي null.
- count لقراءة العمود الفرعي null.
- mapKeys لقراءة العمود الفرعي keys.
- mapValues لقراءة العمود الفرعي values.
- has وnotHas للنوع
Mapلقراءة العمود الفرعي keys. - mapContainsKeyLike لقراءة العمود الفرعي keys.
- mapContainsValueLike لقراءة العمود الفرعي values.
- 0 — التحسين معطّل.
- 1 — التحسين مُمكَّن.
optimize_inverse_dictionary_lookup
تجنّب تكرار البحث العكسي في القاموس من خلال إجراء عمليات بحث أسرع ضمن مجموعة محسوبة مسبقًا من قيم المفاتيح المحتملة.optimize_multiif_to_if
استبدل ‘multiIf’ بـ ‘if’ عندما يحتوي على شرط واحد فقط.optimize_mutations_with_partition_pruning
عند تفعيله، يكتشف ClickHouse تلقائيًا شروط مفتاح التقسيم في عبارة WHERE ضمن عمليات التغييرALTER TABLE UPDATE/DELETE وعبارات UPDATE/DELETE خفيفة الوزن في جداول عائلة ReplicatedMergeTree، ولا يعالج إلا الأقسام المتأثرة بدلًا من جميع الأقسام.
ينطبق هذا الاستبعاد التلقائي حاليًا على الجداول المُكرَّرة فقط. بالنسبة إلى جداول MergeTree غير المُكرَّرة، استخدم عبارة IN PARTITION صريحة لقصر عملية التغيير على أقسام محددة.
القيم الممكنة:
- 0 — معطّل. ستعالج عمليات التغيير والتحديثات خفيفة الوزن جميع الأقسام.
- 1 — مفعّل. ستعالج عمليات التغيير والتحديثات خفيفة الوزن الأقسام التي تطابق شرط WHERE فقط.
optimize_normalize_count_variants
إعادة كتابة الدوال التجميعية المكافئة دلاليًا لـ count() إلى count().optimize_on_insert
يمكّن أو يعطّل تحويل البيانات قبل الإدراج، كما لو أُجريت عملية الدمج على هذه الكتلة (وفقًا لمحرك الجدول). القيم الممكنة:- 0 — معطّل.
- 1 — مفعّل.
optimize_prewhere_after_pushdown
شغّل تمريرة ثانية لترقيةPREWHERE بعد أن تكون تحسينات لاحقة في خطة الاستعلام قد
أضافت عوامل تصفية أخرى فوق خطوة قراءة MergeTree (على سبيل المثال، دفع المسند عبر
JOIN وإعادات كتابة الإسقاط). وعند وجود PREWHERE حالي مسبقًا، يُدمَج عامل
التصفية الجديد فيه باستخدام AND بدلًا من أن يبقى كخطوة تصفية منفصلة.
optimize_qbit_distance_function_reads
يستبدل دوال المسافة على نوع البياناتQBit بما يكافئها من الدوال التي لا تقرأ من التخزين إلا الأعمدة اللازمة للحساب.
optimize_read_in_order
يُفعِّل تحسين ORDER BY في استعلامات SELECT عند قراءة البيانات من جداول MergeTree. القيم الممكنة:- 0 — يكون تحسين
ORDER BYمعطّلًا. - 1 — يكون تحسين
ORDER BYمفعّلًا.
optimize_read_in_reverse_order_final
يُفعِّل قراءة البيانات بالترتيب العكسي لمفتاح الفرز في استعلاماتSELECT المستخدِمة للمُعدِّل FINAL من جداول ReplacingMergeTree. ولا يسري مفعوله إلا إذا كان optimize_read_in_order مُفعَّلًا أيضًا.
القيم الممكنة:
- 0 — القراءة بالترتيب العكسي مع
FINALمُعطَّلة. - 1 — القراءة بالترتيب العكسي مع
FINALمُفعَّلة.
optimize_respect_aliases
إذا ضُبط هذا الإعداد على true، فستُراعى الأسماء المستعارة في WHERE/GROUP BY/ORDER BY، مما يساعد في استبعاد الأقسام/الفهارس الثانوية/optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_countoptimize_sorting_by_input_stream_properties
حسِّن الفرز استنادًا إلى خصائص فرز تدفق الإدخالoptimize_substitute_columns
استخدم القيود في استبدال الأعمدة. القيمة الافتراضية هيfalse.
القيم الممكنة:
- true, false
optimize_syntax_fuse_functions
يتيح دمج الدوال التجميعية ذات الوسيطة نفسها. ويعيد كتابة الاستعلام الذي يتضمن دالتين تجميعيّتين على الأقل من sum أو count أو avg ذات الوسيطة نفسها إلى sumCount. القيم الممكنة:- 0 — لا تُدمَج الدوال ذات الوسيطة نفسها.
- 1 — تُدمَج الدوال ذات الوسيطة نفسها.
optimize_throw_if_noop
يؤدي إلى تمكين أو تعطيل رفع استثناء إذا لم يُجرِ الاستعلام OPTIMIZE عملية دمج. بشكل افتراضي، يُرجِعOPTIMIZE بنجاح حتى إذا لم ينفّذ أي شيء. يتيح لك هذا الإعداد التمييز بين هذه الحالات ومعرفة السبب من خلال رسالة الاستثناء.
القيم الممكنة:
- 1 — تم تمكين رفع استثناء.
- 0 — تم تعطيل رفع استثناء.
optimize_time_filter_with_preimage
يُحسِّن شروط Date وDateTime عبر تحويل الدوال إلى مقارنات مكافئة من دون تحويلات (على سبيل المثال:toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')
optimize_truncate_order_by_after_group_by_keys
احذف عناصر ORDER BY الختامية بعد أن تغطي بادئة ORDER BY جميع مفاتيح GROUP BY.optimize_uniq_to_count
أعِد كتابة uniq وأشكاله (باستثناء uniqUpTo) إلى count إذا تضمّن الاستعلام الفرعي DISTINCT أو بند GROUP BY.optimize_using_constraints
استخدم القيود لتحسين الاستعلامات. القيمة الافتراضية هيfalse.
القيم الممكنة:
- true, false