كيف يمكنني الحصول على Oracle لاستخدام الفهارس عندما تحتوي وجهة نظري على اتحاد كل شيء؟

StackOverflow https://stackoverflow.com/questions/4267081

سؤال

View1 هو:

SELECT A, B, C FROM view2
UNION ALL
SELECT A, B, C FROM view3
  INNER JOIN TBL5 ON view3.CODE = TBL5.CODE

يتم فهرسة العمود C في جداول المصدر ، وعندما أقوم بتنفيذ أي من عبارات SELECT بشكل فردي ، فإنه يستخدم الفهرس ويعود في فلاش. عندما أستخدم عرضه في الخارج. كنت تحت الانطباع بأن أوراكل أعادت كتابة الاستعلامات ضد وجهات النظر والفهارس المستخدمة حيث تكون مفيدة بدلاً من القيام SELECT * FROM VIEW1 ثم تطبيق المتنبئين بعد الحقيقة.

ما الخطأ الذي افعله؟ تضيء مشاهدات العينة أعلاه المشكلة ، لكن وجهات نظراتي الحقيقية تنضم إلى عشرات الجداول ، لذا فإن العرض ضروري حقًا.

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

المحلول

لا يعرف المُحسّن ما هي قيمة الكود قبل الموعد المحدد عندما تقوم ببناء خطة التنفيذ لأنك تتعارض مع العرض. إذا كنت في 11G ، يمكنك استخدام تلميح Push_pred Optimizer لجعله يعمل كما تتوقع.

نصائح أخرى

يمكنك تجربة تلميح. أو تأكد من تحليل الجداول.

فكر آخر - ربما جعل وجهة نظر متري؟

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