مساء الخير مرة أخرى!
نحن نطلق المجموعة الثانية من الدورة التدريبية الجديدة
"Relational DBMS" ، التي أكملناها قليلاً على نتائج الجولة الأولى: تبين أن هناك حاجة إلى فصول إضافية على مجموعات MySQL و Postgres من قبل عامل ميناء والعديد من "تحسينات الملفات" الأخرى. لذا توقع الدروس المفتوحة (التي تم فيها إخراج بعض الموضوعات القديمة) ومواد مثيرة للاهتمام. اليوم نحن الخوض في تقنيات أوراكل.
دعنا نذهب.
فهارس صورة نقطية لـ Oracle مختلفة تمامًا عن فهارس B-tree القياسية. في بنيات الصورة النقطية ، يتم إنشاء صفيف ثنائي الأبعاد بعمود لكل صف في الجدول المفهرس. يمثل كل عمود قيمة منفصلة في فهرس الصورة النقطية. يعرض هذا الصفيف ثنائي الأبعاد كل قيمة فهرس تضاعف عدد الصفوف في هذا الجدول.
يقوم Oracle بإلغاء ضغط الصورة النقطية (مع سرعة استرداد الخط) في المخزن المؤقت لبيانات ذاكرة الوصول العشوائي للمسح السريع للقيم المتطابقة. يتم تمرير قيم المطابقة هذه إلى Oracle كقائمة معرّف الصفوف ، ويمكن لقيم معرّف الصف الوصول مباشرة إلى المعلومات المطلوبة.

تتجلى ميزة خاصة بفهرسة الصورة النقطية عندما يتضمن جدول واحد عدة فهارس نقطية. قوة كل عمود قد تكون منخفضة. يوفر إنشاء فهارس نقطية متعددة طريقة قوية جدًا للاستجابة السريعة لاستعلامات SQL المعقدة.

باستخدام منهجية تجميع الصور النقطية ، يقلل Oracle وقت الاستجابة إلى أقل من ثانية عند العمل مع أعمدة متعددة مع عدد صغير من العناصر.
انتبه أيضًا إلى
الملاحظات المهمة حول الحد الأقصى لقيم فهرس الصورة النقطية Oracle .
على سبيل المثال ، تخيل أن هناك قاعدة بيانات للسيارات بها عدد كبير من الأعمدة منخفضة الطاقة: car_color و car_make و car_model و car_year. يحتوي كل عمود على أقل من 100 قيمة مختلفة ، وسيكون فهرس b-tree عديم الفائدة تمامًا في قاعدة بيانات من 20 مليون سيارة.
ومع ذلك ، يمكن أن يوفر دمج هذه الفهارس في استعلام وقت استجابة عالي أسرع بكثير من الطريقة التقليدية لقراءة كل من الصفوف البالغ عددها 20 مليون في الجدول الأساسي. على سبيل المثال ، لنفترض أننا نريد العثور على سيارة تويوتا كورولا القديمة الزرقاء المصنعة في عام 1981:
select license_plat_nbr from vehicle where color = "blue" and make = "toyota" and year = 1981;
للعمل مع هذا الاستعلام ، يستخدم Oracle طريقة تحسين متخصصة تسمى دمج فهارس الصورة النقطية. في هذه الطريقة ، يتم تكوين كل قائمة من معرّفات الصفوف (باختصار RID) بشكل منفصل باستخدام الصور النقطية ، ويتم استخدام إجراء دمج خاص لمقارنة قوائم RID والبحث عن قيم متداخلة.
كلما زاد عدد القيم المختلفة ، يزداد حجم الصورة النقطية بشكل كبير. لذلك يمكن تشغيل فهرس قيم 100 أسرع 1000 مرة من فهرس الصورة النقطية 1000 قيم عمود مختلفة.
تجدر الإشارة إلى أن فهارس الصور النقطية مناسبة فقط للجداول الثابتة وطرق العرض الملموسة التي يتم تحديثها في الليل وإعادة بنائها بعد التحميل التجميعي للصفوف. في حالة حدوث عدة DML في الثانية في الجدول الخاص بك ، احذر عند تطبيق فهارس الصورة النقطية!
- من 1 إلى 7 قيم أساسية مختلفة - تكون الاستعلامات ذات مؤشرات الصور النقطية منخفضة الطاقة سريعة جدًا ؛
- 8 - 100 قيم أساسية مختلفة - مع زيادة عدد القيم المختلفة ، تقل الإنتاجية بشكل متناسب ؛
- 100 - 10000 قيمة مختلفة - مع أكثر من 100 قيمة مختلفة ، تصبح فهارس الصور النقطية ضخمة وينخفض أداء SQL بسرعة ؛
- أكثر من 10،000 قيمة مفتاح مختلفة - في هذه المرحلة ، يكون الأداء أقل بعشر مرات من الفهرس الذي يحتوي على 100 قيمة مختلفة.
فهارس Oracle Bitmap هي ميزة قوية للغاية في Oracle ، ولكن هناك عيوب!
سوف تحتاج إلى استخدام فهرس الصورة النقطية في الحالات التالية:
- عمود الجدول خفيف الوزن - بالنسبة لدليل DRAFT ، ضع في الاعتبار صورة نقطية لأي فهرس يحتوي على أقل من 100 قيمة مختلفة:
select region, count(*) from sales group by region;
- جداول DML منخفضة - يجب أن يكون استخدام الإدراج / التحديث / الحذف منخفضًا. يتطلب تحديث فهارس الصورة النقطية كثيرًا من الموارد ، لذا فهي أكثر ملاءمة للجداول للقراءة فقط والجداول التي يتم تحديثها على الدُفعات كل ليلة ؛
- أعمدة متعددة - تشير استعلامات SQL الخاصة بك إلى حقول متعددة ذات أصل منخفض في عبارة Where. سيسهّل وجود فهارس الصور النقطية عمل مُحسِّن Oracle ، مما يجعل تقديرًا يعتمد على التكلفة (باختصار - CBO (Optim Based-Optimizer)).
استكشاف أخطاء Oracle Bitmap فهارستتضمن مشكلات تطبيق فهرس الصورة النقطية الأكثر شيوعًا ما يلي:
- طاولة صغيرة - قد يحتاج CBO إلى فحص كامل للجدول إذا كان صغيرًا جدًا!
- إحصائيات غير صالحة - تأكد من تحليل الصورة النقطية باستخدام dbms_stats مباشرة بعد الإنشاء:
CREATE BITMAP INDEX emp_bitmap_idx ON index_demo (gender); exec dbms_stats.gather_index_stats(OWNNAME=>'SCOTT', INDNAME=>'EMP_BITMAP_IDX');
- اختبار تلميح الأدوات - لاستخدام فهرس الصورة النقطية الجديد ، استخدم تلميح Oracle INDEX:
select /*+ index(emp emp_bitmap_idx) */ count(*) from emp, dept where emp.deptno = dept.deptno;
نحن ننتظر الأسئلة والتعليقات هنا أو نأتي إلى
درسنا المفتوح الجديد.