هذه الإعدادات متاحة في system.settings، ويتم إنشاؤها تلقائيًا من المصدر.
optimize_aggregators_of_group_by_keys
يزيل دوال التجميع min/max/any/anyLast لمفاتيح GROUP BY في قسم SELECT
optimize_append_index
استخدم القيود لإضافة شرط الفهرس. القيمة الافتراضية هي false.
القيم الممكنة:
- true, false
optimize_arithmetic_operations_in_aggregate_functions
نقل العمليات الحسابية خارج دوال التجميع
optimize_const_name_size
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 25.11 | 256 | الاستعاضة بـ scalar واستخدام hash اسمًا للثوابت الكبيرة (يُقدَّر الحجم بطول الاسم) |
الاستعاضة بـ scalar واستخدام hash اسمًا للثوابت الكبيرة (يُقدَّر الحجم بطول الاسم).
القيم الممكنة:
- عدد صحيح موجب - الحد الأقصى لطول الاسم،
- 0 — دائمًا،
- عدد صحيح سالب - أبدًا.
optimize_count_from_files
يُمكّن أو يعطّل تحسين احتساب عدد الصفوف من الملفات بتنسيقات إدخال مختلفة. وينطبق ذلك على دوال/محركات الجداول file/s3/url/hdfs/azureBlobStorage.
القيم الممكنة:
- 0 — التحسين معطّل.
- 1 — التحسين مُمكّن.
optimize_dictget_tuple_element
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.5 | 1 | أعِد كتابة tupleElement(dictGet(..., tuple_of_attrs, ...), N) إلى استدعاء dictGet ذي سمة واحدة. |
أعِد كتابة 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 BY
optimize_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_dry_run_check_part
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.2 | 1 | إعداد جديد |
عند التفعيل، يتحقق OPTIMIZE ... DRY RUN من الجزء المدمج الناتج باستخدام checkDataPart. وإذا أخفق التحقق، يُطلَق استثناء.
optimize_empty_string_comparisons
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 25.10 | 1 | إعداد جديد. |
حوِّل تعبيرات مثل col = '' أو '' = col إلى empty(col)، وcol != '' أو '' != col إلى notEmpty(col)،
وذلك فقط عندما يكون col من النوع String أو FixedString.
optimize_extract_common_expressions
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 25.1 | 1 | تحسين تعبيرات WHERE وPREWHERE وON وHAVING وQUALIFY عبر استخراج التعبيرات المشتركة من حالات OR بين تعبيرات AND. |
| 24.12 | 0 | إضافة إعداد لتحسين تعبيرات WHERE وPREWHERE وON وHAVING وQUALIFY عبر استخراج التعبيرات المشتركة من حالات OR بين تعبيرات AND. |
يسمح باستخراج التعبيرات المشتركة من حالات 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
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 24.8 | 1 | الإعداد مُمكَّن افتراضيًا |
يُمكّن هذا الإعداد التحسين أو يعطّله عبر تحويل بعض الدوال بحيث تقرأ الأعمدة الفرعية، مما يقلل كمية البيانات المطلوب قراءتها.
يمكن تحويل هذه الدوال:
- length لقراءة العمود الفرعي size0.
- empty لقراءة العمود الفرعي size0.
- notEmpty لقراءة العمود الفرعي size0.
- isNull لقراءة العمود الفرعي null.
- isNotNull لقراءة العمود الفرعي null.
- count لقراءة العمود الفرعي null.
- mapKeys لقراءة العمود الفرعي keys.
- mapValues لقراءة العمود الفرعي values.
القيم الممكنة:
- 0 — التحسين معطّل.
- 1 — التحسين مُمكَّن.
optimize_inverse_dictionary_lookup
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 25.12 | 1 | إعداد جديد |
تجنّب تكرار البحث العكسي في القاموس من خلال إجراء عمليات بحث أسرع ضمن مجموعة محسوبة مسبقًا من قيم المفاتيح المحتملة.
optimize_multiif_to_if
استبدل 'multiIf' بـ 'if' عندما يحتوي على شرط واحد فقط.
optimize_normalize_count_variants
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 21.3 | 1 | إعادة كتابة الدوال التجميعية المكافئة دلاليًا لـ count() إلى count() افتراضيًا |
إعادة كتابة الدوال التجميعية المكافئة دلاليًا لـ count() إلى count().
optimize_on_insert
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 21.1 | 1 | تمكين تحسين البيانات عند INSERT افتراضيًا لتحسين تجربة المستخدم |
يمكّن أو يعطّل تحويل البيانات قبل الإدراج، كما لو أُجريت عملية الدمج على هذه الكتلة (وفقًا لمحرك الجدول).
القيم الممكنة:
- 0 — معطّل.
- 1 — مفعّل.
مثال
الفرق بين حالتي التمكين والتعطيل:
الاستعلام:
SET optimize_on_insert = 1;
CREATE TABLE test1 (`FirstTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY FirstTable;
INSERT INTO test1 SELECT number % 2 FROM numbers(5);
SELECT * FROM test1;
SET optimize_on_insert = 0;
CREATE TABLE test2 (`SecondTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY SecondTable;
INSERT INTO test2 SELECT number % 2 FROM numbers(5);
SELECT * FROM test2;النتيجة:
┌─FirstTable─┐
│ 0 │
│ 1 │
└────────────┘
┌─SecondTable─┐
│ 0 │
│ 0 │
│ 0 │
│ 1 │
│ 1 │
└─────────────┘لاحظ أن هذا الإعداد يؤثر في سلوك العرض المادي.
optimize_prewhere_after_pushdown
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.6 | 0 | إعداد جديد يفعّل تمريرة ثانية لترقية `PREWHERE` لدمج عوامل التصفية التي أودعتها تحسينات لاحقة فوق خطوة قراءة `MergeTree` (مثل دفع المسند عبر `JOIN` وإعادات كتابة الإسقاط) في سلسلة `PREWHERE` الحالية. |
شغّل تمريرة ثانية لترقية PREWHERE بعد أن تكون تحسينات لاحقة في خطة الاستعلام قد
أضافت عوامل تصفية أخرى فوق خطوة قراءة MergeTree (على سبيل المثال، دفع المسند عبر
JOIN وإعادات كتابة الإسقاط). وعند وجود PREWHERE حالي مسبقًا، يُدمَج عامل
التصفية الجديد فيه باستخدام AND بدلًا من أن يبقى كخطوة تصفية منفصلة.
optimize_qbit_distance_function_reads
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 25.10 | 1 | إعداد جديد |
يستبدل دوال المسافة على نوع البيانات QBit بما يكافئها من الدوال التي لا تقرأ من التخزين إلا الأعمدة اللازمة للحساب.
optimize_read_in_order
يُفعِّل تحسين ORDER BY في استعلامات SELECT عند قراءة البيانات من جداول MergeTree.
القيم الممكنة:
- 0 — يكون تحسين
ORDER BYمعطّلًا. - 1 — يكون تحسين
ORDER BYمفعّلًا.
انظر أيضًا
optimize_respect_aliases
إذا ضُبط هذا الإعداد على true، فستُراعى الأسماء المستعارة في WHERE/GROUP BY/ORDER BY، مما يساعد في استبعاد الأقسام/الفهارس الثانوية/optimize_aggregation_in_order/optimize_read_in_order/optimize_trivial_count
optimize_sorting_by_input_stream_properties
حسِّن الفرز استنادًا إلى خصائص فرز تدفق الإدخال
optimize_substitute_columns
استخدم القيود في استبدال الأعمدة. القيمة الافتراضية هي false.
القيم الممكنة:
- true, false
optimize_syntax_fuse_functions
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.3 | 1 | هذا التحسين جاهز للإنتاج |
يتيح دمج الدوال التجميعية ذات الوسيطة نفسها. ويعيد كتابة الاستعلام الذي يتضمن دالتين تجميعيّتين على الأقل من sum أو count أو avg ذات الوسيطة نفسها إلى sumCount.
القيم الممكنة:
- 0 — لا تُدمَج الدوال ذات الوسيطة نفسها.
- 1 — تُدمَج الدوال ذات الوسيطة نفسها.
مثال
الاستعلام:
CREATE TABLE fuse_tbl(a Int8, b Int8) Engine = Log;
SET optimize_syntax_fuse_functions = 1;
EXPLAIN SYNTAX run_query_tree_passes = 1 SELECT sum(a), sum(b), count(b), avg(b) from fuse_tbl FORMAT TSVRaw;النتيجة:
SELECT
sum(__table1.a) AS `sum(a)`,
tupleElement(sumCount(__table1.b), 1) AS `sum(b)`,
tupleElement(sumCount(__table1.b), 2) AS `count(b)`,
divide(tupleElement(sumCount(__table1.b), 1), toFloat64(tupleElement(sumCount(__table1.b), 2))) AS `avg(b)`
FROM default.fuse_tbl AS __table1optimize_throw_if_noop
يؤدي إلى تمكين أو تعطيل رفع استثناء إذا لم يُجرِ الاستعلام OPTIMIZE عملية دمج.
بشكل افتراضي، يُرجِع OPTIMIZE بنجاح حتى إذا لم ينفّذ أي شيء. يتيح لك هذا الإعداد التمييز بين هذه الحالات ومعرفة السبب من خلال رسالة الاستثناء.
القيم الممكنة:
- 1 — تم تمكين رفع استثناء.
- 0 — تم تعطيل رفع استثناء.
optimize_time_filter_with_preimage
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 24.2 | 1 | تحسين شروط Date وDateTime عبر تحويل الدوال إلى مقارنات مكافئة من دون تحويلات (على سبيل المثال: toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31') |
يُحسِّن شروط Date وDateTime عبر تحويل الدوال إلى مقارنات مكافئة من دون تحويلات (على سبيل المثال: toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')
optimize_truncate_order_by_after_group_by_keys
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.4 | 1 | احذف عناصر ORDER BY الختامية بعد أن تغطي بادئة ORDER BY جميع مفاتيح GROUP BY. |
احذف عناصر ORDER BY الختامية بعد أن تغطي بادئة ORDER BY جميع مفاتيح GROUP BY.
optimize_uniq_to_count
أعِد كتابة uniq وأشكاله (باستثناء uniqUpTo) إلى count إذا تضمّن الاستعلام الفرعي DISTINCT أو بند GROUP BY.
optimize_using_constraints
استخدم القيود لتحسين الاستعلامات. القيمة الافتراضية هي false.
القيم الممكنة:
- true, false