SQL/أوراكل:عندما يمكن استخدام الفهارس على أعمدة متعددة

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

  •  09-06-2019
  •  | 
  •  

سؤال

إذا قمت بإنشاء فهرس على الأعمدة (أ، ب، ج)، بهذا الترتيب، فإن ما أفهمه هو أن قاعدة البيانات ستكون قادرة على استخدامه حتى لو قمت بالبحث فقط على (أ)، أو (أ و ب)، أو ( A وB وC)، ولكن ليس إذا بحثت فقط عن (B)، أو (C)، أو (B وC).هل هذا صحيح؟

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

المحلول

توجد في الواقع ثلاث طرق وصول قائمة على الفهرس يمكن أن تستخدمها Oracle عند وضع المسند على عمود غير بادئ في الفهرس.

ط) مسح تخطي الفهرس: http://download.Oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#PFGRF10105

2) المسح السريع الكامل للمؤشر: http://download.Oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#i52044

ج) مسح الفهرس الكامل: http://download.Oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#i82107

لقد رأيت في كثير من الأحيان المسح السريع الكامل للفهرس "في البرية"، ولكن كل ذلك ممكن.

نصائح أخرى

هذا ليس صحيحا.من الأفضل دائمًا التوصل إلى حالة اختبار تمثل بياناتك وترى بنفسك.إذا كنت تريد أن تفهم حقًا Oracle SQL Optimizer، فابحث عن جوناثان لويس، واقرأ كتبه، واقرأ مدونته، وتحقق من موقعه على الويب، فالرجل مذهل، ويقوم دائمًا بإنشاء حالات اختبار.

create table mytab nologging as (
select mod(rownum, 3) x, rownum  y, mod(rownum, 3) z from all_objects, (select 'x' from user_tables where rownum < 4)
);

create index i on mytab (x, y, z);

exec dbms_stats.gather_table_stats(ownname=>'DBADMIN',tabname=>'MYTAB', cascade=>true);

set autot trace exp

select * from mytab where y=5000;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=10)
   1    0   INDEX (SKIP SCAN) OF 'I' (INDEX) (Cost=1 Card=1 Bytes=10)

حتى الإصدار أوراكل 8 لن يتم استخدام الفهرس أبدًا ما لم يتم تضمين العمود الأول في SQL.

في أوراكل 9i تخطي الوصول إلى فهرس المسح الضوئي تم تقديم الميزة، والتي تتيح لـ Oracle CBO محاولة استخدام الفهارس حتى عندما لا يكون عمود البادئة متاحًا.

نظرة عامة جيدة حول كيفية عمل تخطي الفحص هنا: http://www.quest-pipelines.com/newsletter-v5/1004_C.htm

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