هذه الإعدادات متوفّرة في system.settings، وهي مُولَّدة تلقائيًا من المصدر.
optimize_trivial_approximate_count_query
استخدم قيمة تقديرية لتحسين العدّ البسيط في وحدات التخزين التي تدعم هذا النوع من التقدير، مثل EmbeddedRocksDB.
القيم الممكنة:
- 0 — التحسين معطّل.
- 1 — التحسين مفعّل.
optimize_trivial_count_query
يُفعّل أو يعطّل تحسين الاستعلام البسيط SELECT count() FROM table باستخدام البيانات الوصفية من MergeTree. إذا كنت بحاجة إلى استخدام أمان على مستوى الصفوف، فعطّل هذا الإعداد.
القيم الممكنة:
- 0 — التحسين معطّل.
- 1 — التحسين مفعّل.
انظر أيضًا:
optimize_trivial_count_with_sparsity_filter
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.8 | 1 | الترقية إلى BETA والتفعيل افتراضيًا: تقديم `SELECT count() FROM t WHERE <pred>` من العدّادات المحفوظة `num_defaults` / `num_rows` لكل عمود عندما يقسم `<pred>` الصفوف إلى قيم افتراضية وغير افتراضية. يتطلب إعداد MergeTree `compute_exact_num_defaults_for_sparse_columns` (المفعّل افتراضيًا الآن أيضًا). |
| 26.7 | 0 | إعداد جديد (تجريبي) لتقديم `SELECT count() FROM t WHERE <pred>` استنادًا إلى `num_defaults` / `num_rows` لكل عمود والمُسجَّلين في `serialization.json` عندما يقسم `<pred>` الصفوف إلى قيم افتراضية وغير افتراضية. |
يوسّع تحسين optimize_trivial_count_query ليشمل
الاستعلامات من الشكل SELECT count() FROM t WHERE col <op> const، حيث تؤدي <op> const
إلى تقسيم الصفوف بدقة إلى القيم الافتراضية وغير الافتراضية للعمود col. وعندها يُستمدّ العدد
من العدّادات num_defaults / num_rows لكل عمود التي يحتفظ بها MergeTree بالفعل
في serialization.json، من دون فحص البيانات.
الأنماط المتعرَّف عليها:
col = default(col)/col != default(col)لـInt*/UInt*وString/FixedStringوDate/DateTime/DateTime64وDecimal*وUUIDوIPv4/IPv6.IS NULL/IS NOT NULLعلى الأعمدةNullable.empty(col)/notEmpty(col)على أعمدةString.col = true/col != trueعلى أعمدةBool.col > 0وcol >= 1وcol < 1وcol <= 0على أعمدة الأعداد الصحيحة غير الموقَّعة.col/NOT colمباشرةً على أعمدةInt*وUInt*وBool(اختبار القيمة المنطقية).
لا تُطبَّق أنماط المساواة على Float* أو Enum* أو Nullable أو LowCardinality
أو الأنواع المركبة (Tuple وArray وMap و…) — وبالنسبة إلى هذه الأنواع، يُستمدّ العدد من
مسار الفحص العادي.
لكي يسري ذلك، يجب أن يكون العدّاد num_defaults لكل part دقيقًا. فعِّل إعداد الجدول في MergeTree
compute_exact_num_defaults_for_sparse_columns على الجدول الهدف قبل
عمليات insert وmerges. أمّا الـ parts المكتوبة من دونه فتُستبعَد بصمت من إعادة الكتابة هذه، لذا
فإن تفعيل optimize_trivial_count_with_sparsity_filter وحده ليس كافيًا.
بالنسبة إلى أنماط IS NULL / IS NOT NULL على أعمدة Nullable، يجب أيضًا أن تكون للعمود
مدخلة num_defaults في serialization.json، وهذا لا يحدث إلا عندما يكون إعداد الجدول في MergeTree
nullable_serialization_version مضبوطًا على allow_sparse وقت insert /
merge. مع القيمة الافتراضية basic، لا تحصل أعمدة Nullable على أي مدخلة لكل عمود، لذلك
لا يُطبَّق هذا التحسين بصمت.
القيم الممكنة:
- 0 — التحسين معطّل.
- 1 — التحسين مفعّل.
انظر أيضًا:
optimize_trivial_group_by_limit_query
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.5 | 1 | إعداد جديد يحدّ من التجميع إلى حدّ أقصى يبلغ `LIMIT` من المفاتيح المميزة لاستعلامات `SELECT key_expr FROM t GROUP BY key_expr LIMIT n`. |
يؤدي هذا الإعداد إلى تمكين تحسين الاستعلام البسيط SELECT key_expr FROM table GROUP BY key_expr LIMIT n أو تعطيله (من دون دوال تجميع أو دوال نوافذ أو arrayJoin في الإسقاط، ومن دون بنود HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT/window، ومن دون معدِّلات GROUP BY) وذلك عبر تعيين max_rows_to_group_by = n + offset وgroup_by_overflow_mode = 'any'. ويتوقف التجميع بمجرد إنتاج n + offset من المفاتيح المميزة.
يُلغى هذا التحسين عندما يكون المستخدم قد عيّن group_by_overflow_mode صراحةً إلى قيمة غير any (للحفاظ على سلوك throw/break الذي حدّده صراحةً)، وكذلك عندما يكون قد عيّن مسبقًا قيمة أكثر تقييدًا لـ max_rows_to_group_by (إذ يصبح التحسين عندئذٍ بلا تأثير).
القيم الممكنة:
- 0 — التحسين معطّل.
- 1 — التحسين مفعّل.
optimize_trivial_insert_select
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 24.7 | 0 | هذا التحسين غير منطقي في كثير من الحالات. |
تحسين استعلام 'INSERT INTO table SELECT … FROM TABLES' البسيط
optimize_trivial_view_pushdown_to_distributed
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.8 | 1 | إعداد جديد لدفع الاستعلام الخارجي بالكامل إلى الأجزاء في المشاهدات البسيطة المبنية على جداول Distributed. |
عند تفعيله، تُدفع الاستعلامات الخارجية بالكامل إلى كل جزء للمشاهدات المبنية على جداول Distributed التي لا تحتوي قائمة SELECT فيها إلا على مراجع أعمدة أو *
أو تعبيرات (من دون دوال النوافذ أو الاستعلامات الفرعية ذات القيمة المفردة)، ولا تتضمن تجميعًا أو تجميعًا حسب أو ترتيبًا أو عمليات ربط. يتيح ذلك للجزء تطبيق عوامل تصفية المشاهدة وتعبيراتها محليًا، مما يقلل كمية البيانات المنقولة عبر الشبكة.
القيم الممكنة:
- 0 — التحسين معطّل؛ تُنفَّذ المشاهدات المبنية على جداول
Distributedدائمًا على المنسّق. - 1 — التحسين مفعّل.