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

> توثيق للتعامل مع فهارس تخطي البيانات

# التعامل مع فهارس تخطي البيانات

العمليات التالية متاحة:

<div id="add-index">
  ## ADD INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] ADD INDEX [IF NOT EXISTS] name expression TYPE type [GRANULARITY value] [FIRST|AFTER name]` - يضيف وصف الفهرس إلى البيانات الوصفية للجداول.

<div id="drop-index">
  ## DROP INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] DROP INDEX [IF EXISTS] name` - يزيل وصف الفهرس من البيانات الوصفية للجدول ويحذف ملفات الفهرس من القرص. ويُنفَّذ ذلك على شكل [mutation](/ar/reference/statements/alter/index#mutations).

<div id="materialize-index">
  ## MATERIALIZE INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] MATERIALIZE INDEX [IF EXISTS] name [IN PARTITION partition_name]` - يعيد بناء الفهرس الثانوي `name` للقسم `partition_name` المحدد. يُنفَّذ كتعديلٍ [mutation](/ar/reference/statements/alter/index#mutations). إذا أُهمل جزء `IN PARTITION`، فسيُعاد بناء الفهرس لبيانات الجدول كاملةً.

لا يُعد [`MATERIALIZE COLUMN`](/ar/reference/statements/alter/column#materialize-column) بديلًا كاملًا عن `MATERIALIZE INDEX`. في الأجزاء التي تكون **عريضة + بتخزين كامل** في الوقت نفسه، قد يعيد كتابة قيم الأعمدة دون تحديث ملفات فهارس التخطي (أو الفهارس النصية) **المستقلة**. وتُستثنى من ذلك فهارس التخطي العادية المخزنة في `skp_idx.packed`: إذ يمكن مع ذلك فرض إعادة حسابها في الأجزاء العريضة + ذات التخزين الكامل (تدفقات فرعية صغيرة لفهرس التخطي تكون أقل من القيمة الافتراضية لـ [`packed_skip_index_max_bytes`](/ar/reference/settings/merge-tree-settings/other#packed_skip_index_max_bytes)؛ لا تُحزَّم فهارس النص الكامل بهذه الطريقة). في **أي جزء لا يكون عريضًا + بتخزين كامل** (بما في ذلك **مدمج + كامل** و**مدمج + محزّم** و**عريض + محزّم**)، يمكن لإعادة كتابة الجزء بالكامل إعادة حساب الفهارس الموجودة مسبقًا — فعادةً ما تكون الأجزاء الصغيرة مدمجة، مع أنها تستخدم تخزين الأجزاء الكامل افتراضيًا. استخدم `MATERIALIZE INDEX` للمسار **الحتمي / الفوري** عند إضافة فهرس إلى جدول يحتوي بالفعل على بيانات (`ADD INDEX` للبيانات الوصفية فقط)، وكذلك بعد إعادة كتابة الأعمدة في الأجزاء العريضة+ذات التخزين الكامل عندما تحتاج إلى إعادة بناء ملفات الفهارس المستقلة فورًا. يمكن أيضًا تجسيد الفهارس المضافة حديثًا (بما فيها فهارس النص) في الأجزاء التاريخية عبر عملية دمج لاحقة عند تمكين [`materialize_skip_indexes_on_merge`](/ar/reference/settings/merge-tree-settings/materialize#materialize_skip_indexes_on_merge) وعدم استبعاد الفهرس عبر [`exclude_materialize_skip_indexes_on_merge`](/ar/reference/settings/merge-tree-settings/exclude#exclude_materialize_skip_indexes_on_merge)؛ وإلا فستبقى غير مجسّدة إلى أن يُنفَّذ `MATERIALIZE INDEX` صراحةً.

<div id="clear-index">
  ## CLEAR INDEX
</div>

`ALTER TABLE [db.]table_name [ON CLUSTER cluster] CLEAR INDEX [IF EXISTS] name [IN PARTITION partition_name]` - يحذف ملفات الفهرس الثانوي من القرص دون إزالة الوصف. يُنفَّذ على شكل [mutation](/ar/reference/statements/alter/index#mutations).

تُعد الأوامر `ADD` و`DROP` و`CLEAR` خفيفة، بمعنى أنها لا تغيّر سوى البيانات الوصفية أو تزيل الملفات.
كما أنها مكررة، إذ تُزامِن البيانات الوصفية للفهارس عبر ClickHouse Keeper أو ZooKeeper.

<Note>
  يُدعَم التعامل مع الفهارس فقط للجداول التي تستخدم المحرك [`*MergeTree`](/ar/reference/engines/table-engines/mergetree-family/mergetree) (بما في ذلك الأنواع [replicated](/ar/reference/engines/table-engines/mergetree-family/replication)).
</Note>

<div id="concurrent-alter-and-multi-clause-materialize-index">
  ## تنفيذ `ALTER` المتزامن و`MATERIALIZE INDEX` متعدد العبارات
</div>

في الجداول المكررة، قد تؤدي أوامر `ALTER` المنفصلة والمتتابعة بسرعة على جدول واحد إلى ظهور `CANNOT_ASSIGN_ALTER` (الشيفرة 517) عندما لا تكون أوامر `ALTER` السابقة قد طُبّقت بعد على النسخة المتماثلة (إذ تظل البيانات الوصفية متأخرة، وقد يستمر ذلك حتى بعد إسناد أمر alter سابق). هذه حالة عامة تتعلق بتنفيذ `ALTER` متزامن على البيانات الوصفية/بـmutation، وليست مقتصرة على mutation وحدها؛ نفّذ العمليات بالتسلسل أو أعد المحاولة، وانتظر أوامر alter السابقة التي تُنتج mutation باستخدام [`mutations_sync`](/ar/reference/settings/session-settings/mutations#mutations_sync) / `is_done` في [`system.mutations`](/ar/reference/system-tables/mutations)، أو ادمج عمليات البيانات الوصفية المستقلة في أمر `ALTER` واحد متعدد العبارات عندما تسمح القواعد النحوية بذلك. راجع [تزامن استعلامات ALTER](/ar/reference/statements/alter/index#synchronicity-of-alter-queries) و[إسناد ALTER المتزامن](/ar/reference/statements/alter/index#concurrent-alter-assignment-on-one-table).

يمكن أن تظهر عدة عبارات `MATERIALIZE INDEX` ضمن أمر `ALTER` واحد. الحالة المغطاة في الشيفرة المصدرية هي تجميع عدة عبارات `ADD INDEX` مع `MATERIALIZE INDEX` للفهارس الجديدة نفسها في تعليمة واحدة (`tests/queries/0_stateless/02911_add_index_and_materialize_index.sql`). هذه الصيغة المجمّعة مخصصة لقواعد البيانات العادية (غير `DatabaseReplicated`)؛ إذ يرفض `DatabaseReplicated` المقاطع المختلطة من `ADD INDEX` و`MATERIALIZE INDEX` باستخدام `QUERY_IS_PROHIBITED`. أما الصيغ متعددة العبارات التي تقتصر على `MATERIALIZE INDEX` للفهارس الموجودة مسبقًا، فتتبع في التنفيذ الحالي مسار إعداد لقطة البيانات الوصفية نفسه، لكن هذا الشكل المحدد لا يغطيه بعد اختبار عديم الحالة مخصص؛ لذا اعتبره سلوكًا للتنفيذ الحالي، لا ضمانًا تعاقديًا مستقلًا، إلى أن تتوفر هذه التغطية. وللتطبيق بالترتيب، نفّذ `MATERIALIZE INDEX` واحدًا في كل تعليمة وانتظر باستخدام [`mutations_sync`](/ar/reference/settings/session-settings/mutations#mutations_sync).
