كيف يمكنني الحصول على Oracle لاستخدام الفهارس عندما تحتوي وجهة نظري على اتحاد كل شيء؟
سؤال
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 لجعله يعمل كما تتوقع.
نصائح أخرى
يمكنك تجربة تلميح. أو تأكد من تحليل الجداول.
فكر آخر - ربما جعل وجهة نظر متري؟