> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# إعدادات الجلسة optimize_trivial_*

> إعدادات جلسة ClickHouse في المجموعة المُولَّدة optimize_trivial_*.

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>Beta</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>ميزة Beta</span>
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["الإصدار", "القيمة الافتراضية", "التعليق"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        سجل الإصدارات
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>النوع</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>القيمة الافتراضية</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          يمكن تغييره دون إعادة التشغيل
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

هذه الإعدادات متوفّرة في [system.settings](/ar/reference/system-tables/settings)، وهي مُولَّدة تلقائيًا من [المصدر](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="optimize_trivial_approximate_count_query">
  ## optimize\_trivial\_approximate\_count\_query
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

استخدم قيمة تقديرية لتحسين العدّ البسيط في وحدات التخزين التي تدعم هذا النوع من التقدير، مثل EmbeddedRocksDB.

القيم الممكنة:

* 0 — التحسين معطّل.
  * 1 — التحسين مفعّل.

<div id="optimize_trivial_count_query">
  ## optimize\_trivial\_count\_query
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

يُفعّل أو يعطّل تحسين الاستعلام البسيط `SELECT count() FROM table` باستخدام البيانات الوصفية من MergeTree. إذا كنت بحاجة إلى استخدام أمان على مستوى الصفوف، فعطّل هذا الإعداد.

القيم الممكنة:

* 0 — التحسين معطّل.
  * 1 — التحسين مفعّل.

انظر أيضًا:

* [optimize\_functions\_to\_subcolumns](/ar/reference/settings/session-settings/optimize#optimize_functions_to_subcolumns)

<div id="optimize_trivial_count_with_sparsity_filter">
  ## optimize\_trivial\_count\_with\_sparsity\_filter
</div>

<BetaBadge />

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "الترقية إلى BETA والتفعيل افتراضيًا: تقديم `SELECT count() FROM t WHERE <pred>` من العدّادات المحفوظة `num_defaults` \/ `num_rows` لكل عمود عندما يقسم `<pred>` الصفوف إلى قيم افتراضية وغير افتراضية. يتطلب إعداد MergeTree ‏`compute_exact_num_defaults_for_sparse_columns` (المفعّل افتراضيًا الآن أيضًا)."}]}, {"id": "row-2","items": [{"label": "26.7"},{"label": "0"},{"label": "إعداد جديد (تجريبي) لتقديم `SELECT count() FROM t WHERE <pred>` استنادًا إلى `num_defaults` \/ `num_rows` لكل عمود والمُسجَّلين في `serialization.json` عندما يقسم `<pred>` الصفوف إلى قيم افتراضية وغير افتراضية."}]}]} />

يوسّع تحسين [optimize\_trivial\_count\_query](/ar/reference/settings/session-settings/optimize-trivial#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\_count\_query](/ar/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query)

<div id="optimize_trivial_group_by_limit_query">
  ## optimize\_trivial\_group\_by\_limit\_query
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "إعداد جديد يحدّ من التجميع إلى حدّ أقصى يبلغ `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 — التحسين مفعّل.

<div id="optimize_trivial_insert_select">
  ## optimize\_trivial\_insert\_select
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "هذا التحسين غير منطقي في كثير من الحالات."}]}]} />

تحسين استعلام 'INSERT INTO table SELECT ... FROM TABLES' البسيط

<div id="optimize_trivial_view_pushdown_to_distributed">
  ## optimize\_trivial\_view\_pushdown\_to\_distributed
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "إعداد جديد لدفع الاستعلام الخارجي بالكامل إلى الأجزاء في المشاهدات البسيطة المبنية على جداول Distributed."}]}]} />

عند تفعيله، تُدفع الاستعلامات الخارجية بالكامل إلى كل جزء للمشاهدات المبنية على جداول [Distributed](/ar/reference/engines/table-engines/special/distributed) التي لا تحتوي قائمة `SELECT` فيها إلا على مراجع أعمدة أو `*`
أو تعبيرات (من دون دوال النوافذ أو الاستعلامات الفرعية ذات القيمة المفردة)، ولا تتضمن تجميعًا أو تجميعًا حسب أو ترتيبًا أو عمليات ربط. يتيح ذلك للجزء تطبيق عوامل تصفية المشاهدة وتعبيراتها محليًا، مما يقلل كمية البيانات المنقولة عبر الشبكة.

القيم الممكنة:

* 0 — التحسين معطّل؛ تُنفَّذ المشاهدات المبنية على جداول `Distributed` دائمًا على المنسّق.
* 1 — التحسين مفعّل.
