فهرس على سؤال Oracle 11g
سؤال
لدي طاولة (رجال) مع 900000 سجل.
في هذا الجدول لدي حقل IP
و Tdate
.
عندما أقوم بتشغيل الاستعلام:
select * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
يستغرق وقتًا طويلاً حتى أحصل على النتيجة.
أحاول جعل فهرس مثل هذا:
create index
my_in
on
MEN (IP,Tdate );
ولكن كيف تدير الاستعلام للحصول على نتيجة سريعة؟
أحاول هذا:
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
والحصول على خطأ: ORA-00904
المحلول
لا تستخدم اسم الفهرس (my_in) في SELECT. ستعرف قاعدة البيانات نفسها لاستخدام الفهرس. لذلك يجب عليك فعل الشيء نفسه كما في مثالك الأول.
نصائح أخرى
في استفسارك
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
my_in هو اسم الفهرس. إذا كنت تريد فرض استخدام الفهرس ، فيمكنك تلميح استفسارك
select /*+INDEX(My_in MEN) */ * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
هذا غير صالح SQL. My_in
هو اسم الفهرس الخاص بك.
حاول مرة أخرى مع:
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
بدلاً من ذلك ، إذا كنت تريد معرفة ما إذا كان الخادم سيستخدم خطة باستخدام الفهرس الذي تم إنشاؤه حديثًا ، فيمكنك فحص إخراج explain
يأمر:
explain plan for
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
ألق نظرة على وثائق Oracle على شرح الخطة. سوف يساعدك في هذا والعديد من تحسينات SQL الأخرى.