Skip to main content
هذه الإعدادات متاحة في system.settings، وهي مُولَّدة تلقائيًا من المصدر.

optimize_or_like_chain

حسِّن عدة شروط OR LIKE/ILIKE/match على التعبير نفسه إلى multiSearchAny/multiSearchAnyCaseInsensitiveUTF8 واحد (لأنماط %needle% من نوع pure-substring) أو multiMatchAny (للأنماط الأخرى عند السماح بـ Hyperscan/Vectorscan). وإذا لم يكن أي من المسارين السريعين قابلًا للتطبيق — على سبيل المثال عند تعطيل Hyperscan أو عدم توفره، أو إذا كانت الأنماط تعبيرات match نمطية خام، أو غير صالحة بترميز UTF-8، أو تحتوي على NUL مضمن، أو كان النص المُراد البحث فيه من النوع FixedString/Enum — فستبقى سلسلة OR الأصلية دون تغيير، لأن دمج بدائل match فوق RE2 يكون أبطأ باستمرار من OR الأصلية ذات الاختصار المنطقي. يُطبَّق هذا التحسين فقط مع المحلّل (enable_analyzer = 1، وهو الافتراضي)؛ أما مع المحلّل القديم (enable_analyzer = 0) فتُترك سلسلة OR دون تغيير. وفي سلاسل OR الخالصة من LIKE/ILIKE/match، تُحفَظ التعبيرات الأصلية داخل indexHint() لإتاحة تحليل الفهرس؛ أما سلاسل OR المختلطة التي تتضمن فروعًا غير LIKE فتتخطى عمدًا تغليف indexHint() حتى لا تُستبعَد النطاقات التي لا تطابق إلا الفرع غير LIKE. كما تراعي إعادة كتابة multiMatchAny القيم allow_hyperscan وmax_hyperscan_regexp_length وmax_hyperscan_regexp_total_length وreject_expensive_hyperscan_regexps. لا يُعاد كتابة السلسلة إلا إذا كان فيها عدد كافٍ من الفروع التي تشترك في تعبير الطرف الأيسر نفسه، بحيث تكون إعادة الكتابة أسرع بشكل موثوق من تقييم OR ذي الاختصار المنطقي: بحد أدنى optimize_or_like_chain_min_substrings من الفروع لمسار multiSearchAny، وبحد أدنى optimize_or_like_chain_min_patterns من الفروع لمسار multiMatchAny.

optimize_or_like_chain_min_patterns

الحد الأدنى لعدد فروع LIKE/ILIKE/match غير القائمة على pure-substring (أنماط prefix/suffix/regexp) التي تشترك في تعبير الطرف الأيسر نفسه، واللازم لكي يعيد optimize_or_like_chain كتابة سلسلة إلى multiMatchAny. جرى ضبطه استنادًا إلى مجموعة البيانات hits (راجع tests/performance/optimize_or_like_chain_hits.xml): إذ إن إعادة كتابة سلاسل LIKE من نوع prefix/regexp إلى multiMatchAny ‏(Hyperscan) لا تصبح أسرع من تقييم OR بالاختصار المنطقي إلا ابتداءً من نحو تسعة فروع، لذا تُترك السلاسل الأقصر كما هي لتجنّب تراجع الأداء. تؤدي القيمة 0 أو 1 إلى تعطيل هذه العتبة. ولا يكون له أي تأثير عندما يكون optimize_or_like_chain معطّلًا. راجع أيضًا optimize_or_like_chain_min_substrings لمسار pure-substring ‏(multiSearchAny).

optimize_or_like_chain_min_substrings

الحد الأدنى لعدد فروع LIKE/ILIKE من نوع pure-substring (%needle%) التي تشترك في تعبير الطرف الأيسر نفسه، واللازم لكي يعيد optimize_or_like_chain كتابة سلسلة إلى multiSearchAny/multiSearchAnyCaseInsensitiveUTF8. تمت معايرته على مجموعة بيانات hits (انظر tests/performance/optimize_or_like_chain_hits.xml): تصبح إعادة الكتابة إلى multiSearchAny أسرع من الاختصار المنطقي لـ OR ابتداءً من نحو أربعة فروع. تؤدي القيمة 0 أو 1 إلى تعطيل هذه العتبة. ولا يكون لذلك أي تأثير عندما يكون optimize_or_like_chain معطّلًا. انظر أيضًا optimize_or_like_chain_min_patterns لمسار التعبير النمطي (multiMatchAny).
آخر تعديل في ٢٣ يوليو ٢٠٢٦