سؤال

يتم إخباري وقراءته في كل مكان (ولكن لم يجرؤ أحد على شرح السبب) أنه عند إنشاء فهرس على أعمدة متعددة ، يجب أن أضع العمود الأكثر انتقائيًا أولاً ، لأسباب في الأداء. لماذا هذا؟ هل هي أسطورة؟

هل كانت مفيدة؟

المحلول

يجب أن أضع العمود الأكثر انتقائيًا أولاً

وفقا لتوم, ، انتقائية العمود لا لها أي تأثير على الأداء للاستعلامات التي تستخدم جميع الأعمدة في الفهرس (إنها تؤثر على قدرة Oracle على ضغط الفهرس).

إنه ليس أول شيء ، فهو ليس أهم شيء. بالتأكيد ، إنه شيء يجب مراعاته ولكنه بعيدًا نسبيًا في المخطط الكبير للأشياء.

في بعض الحالات الغريبة والغريبة للغاية وغير الطبيعية (مثل ما سبق مع بيانات منحرفة تمامًا) ، يمكن أن تكون الانتقائية مهمة بسهولة ومع ذلك ، فهي كذلك

أ) نادر جدًا ب) يعتمد حقًا على القيم المستخدمة في وقت التشغيل ، حيث توجد جميع الاستعلامات المنحرفة

لذلك بشكل عام ، انظر إلى الأسئلة التي لديك ، حاول تقليل الفهارس التي تحتاجها بناءً على ذلك.

عدد القيم المتميزة في عمود في فهرس متسلسل غير مناسب عند النظر في الموضع في الفهرس.

ومع ذلك ، يجب أن تأتي هذه الاعتبارات في المرتبة الثانية عند اتخاذ قرار بشأن ترتيب عمود الفهرس. الأهم من ذلك هو التأكد من أن الفهرس يمكن أن يكون مفيدًا للعديد من الاستعلامات ، لذلك يجب أن يعكس ترتيب العمود استخدام تلك الأعمدة (أو عدم وجودها) في مكان جمل استفساراتك (للسبب الموضح بواسطة Andrekr).

كيف تستخدم الفهرس - هذا هو ما هو مناسب عند اتخاذ القرار.

كل الأشياء الأخرى متساوية ، ما زلت سأضع العمود الأكثر انتقائيًا أولاً. إنه شعور على حق ...

تحديث: اقتباس آخر من توم (بفضل ميلانو للعثور عليه).

في Oracle 5 (نعم ، الإصدار 5!) ، كان هناك حجة لوضع الأعمدة الأكثر انتقائية أولاً في الفهرس.

منذ ذلك الحين ، ليس صحيحًا أن وضع الإدخالات الأكثر تمييزًا أولاً في الفهرس سيجعل الفهرس أصغر أو أكثر كفاءة. يبدو أنه سوف ، لكنه لن يفعل ذلك.

مع ضغط مفتاح الفهرس ، هناك وسيطة مقنعة للذهاب في الاتجاه الآخر لأنه يمكن أن يجعل الفهرس أصغر. ومع ذلك ، يجب أن يكون مدفوعًا بكيفية استخدام الفهرس ، كما ذكر سابقًا.

نصائح أخرى

يمكنك حذف الأعمدة من اليمين إلى اليسار عند استخدام فهرس ، أي عندما يكون لديك فهرس col_a, col_b يمكنك استخدامه في WHERE col_a = x لكن لا يمكنك استخدامه في WHERE col_b = x.

تخيل أن يكون لديك دفتر هاتفي يتم فرزه بالأسماء الأولى وثم من خلال الأسماء الأخيرة.

على الأقل في أوروبا والأسماء الأولى للولايات المتحدة ، يكون لها انتقائية أقل بكثير من الأسماء الأخيرة ، لذا فإن البحث عن الاسم الأول لن يضيق النتيجة التي تم تعيينها كثيرًا ، لذلك ستظل هناك العديد من الصفحات للتحقق من الاسم الأخير الصحيح.

يجب تحديد ترتيب الأعمدة في الفهرس من خلال استفساراتك ولا يكون أي اعتبارات انتقائية. إذا كان لديك فهرس على (A ، B ، C) ، ومعظم استفسارات الأعمدة الفردية الخاصة بك ضد العمود C ، تليها A ، ثم ضعها بترتيب C ، A ، B في تعريف الفهرس للحصول على أفضل كفاءة . تفضل Oracle استخدام الحافة الأمامية للفهرس للاستعلام ، ولكن يمكنها استخدام أعمدة أخرى في الفهرس في مسار وصول أقل كفاءة يُعرف باسم Skip-Scan.

كلما زاد انتقائي هو الفهرس الخاص بك ، أسرع هو البحث.

ببساطة تخيل دفتر الهاتف: يمكنك العثور على شخص سريع في الغالب عن طريق اسم LastName. ولكن إذا كان لديك الكثير من الأشخاص الذين يحملون اسم LastName ، فسوف تدوم المزيد من الوقت للبحث عن الشخص من خلال النظر إلى الاسم الأول في كل مرة.

لذلك عليك أن تعطي الأعمدة الأكثر انتقائية أولاً لتجنب أكبر قدر ممكن من هذه المشكلة.

بالإضافة إلى ذلك ، يجب عليك بعد ذلك التأكد من أن استفساراتك تستخدم بشكل صحيح "معيرة الانتقائية".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top