سؤال

عند العمل مع الجداول في Oracle، كيف تعرف متى تقوم بإعداد فهرس جيد مقابل فهرس سيء؟

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

المحلول

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

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

يعد إنشاء الفهرس بمثابة عملية موازنة بين سرعة الاستعلام وسرعة الكتابة.في بعض الحالات، مثل datamart الذي يتم تحميله بالبيانات مرة واحدة فقط في الأسبوع في مهمة ليلية ولكن يتم الاستعلام عنها آلاف المرات يوميًا، فمن المنطقي جدًا زيادة التحميل بالفهارس وتسريع الاستعلامات قدر الإمكان.ومع ذلك، في حالة أنظمة معالجة المعاملات عبر الإنترنت، فأنت تريد محاولة إيجاد التوازن بينها.

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

بعد ذلك، يتعلق الأمر باختبار الحمل لمعرفة كيفية تفاعل الأداء في ظل ظروف الإنتاج، والكثير من التغيير والتبديل للعثور على توازن مقبول.

نصائح أخرى

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

قد يكون المثال المضاد هو الجنس - هناك قيمتان مشتركتان فقط، وبالتالي فإن الفهرس لا يساعد حقًا في تقليل عدد الصفوف التي يجب فحصها.

تُنشئ السلاسل الوصفية ذات الشكل الحر كاملة الطول فهارس رديئة، حيث إن من يقوم بالاستعلام نادرًا ما يعرف القيمة الدقيقة للسلسلة.

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

إليك مقالة رائعة عن SQL Server:http://www.sql-server-performance.com/tips/optimizing_indexes_general_p1.aspx

على الرغم من أن الآليات لن تعمل مع Oracle، إلا أن النصائح مناسبة جدًا (مطروحًا منها ما هو موجود في الفهارس المجمعة، والتي لا تعمل تمامًا بنفس الطريقة في Oracle).

@Infamous Cow - يجب أن تفكر في المفاتيح الأساسية، وليس الفهارس.

Xenph Yan - شيء لم يتطرق إليه الآخرون هو اختيار ما عطوف من الفهرس لإنشاء.بعض قواعد البيانات لا تمنحك حقًا الكثير من الاختيارات، لكن بعضها يحتوي على مجموعة كبيرة ومتنوعة من الفهارس المحتملة.أشجار B هي تقصير ولكن ليس دائمًا أفضل نوع من الفهرس.يعتمد اختيار البنية الصحيحة على نوع الاستخدام الذي تتوقعه.ما نوع الاستعلامات التي تحتاج إلى دعمها أكثر؟هل أنت في بيئة أغلبها للقراءة أم للكتابة في الغالب؟هل تهيمن التحديثات أو الإضافات على كتاباتك؟الخ، الخ.

يتوفر وصف للأنواع المختلفة من الفهارس وإيجابياتها وسلبياتها هنا: http://20bits.com/2008/05/13/interview-questions-database-indexes/ .

بعض القواعد الأساسية إذا كنت تحاول تحسين استعلام معين.

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

على سبيل المثال:

WHERE CompanyCode = ? AND Amount BETWEEN 100 AND 200

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

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

يمكنك تأليف كتاب عن أفضل الطرق للفهرسة - ابحث عن المؤلف جوناثان لويس.

الفهرس الجيد هو شيء يمكنك الاعتماد عليه ليكون فريدًا لصف جدول محدد.

أحد أنظمة الفهرس الشائعة الاستخدام هو استخدام الأرقام التي تزيد بمقدار 1 لكل صف في الجدول.سينتهي كل صف بفهرس أرقام مختلف.

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