سؤال

لدي طاولة (رجال) مع 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 الأخرى.

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