Максимальный агрегат оптимизации запросов Oracle без использования индекса

avatar
DJAMEL DAHMANE
8 апреля 2018 в 00:41
49
1
1

У меня есть таблица "AvoirStatuts", которая определена следующим образом: enter image description here

это таблица ассоциации для двух других таблиц, внешние ключи 'num_compte' и 'id_statut'

У меня есть запрос (здесь я создал представление ), чтобы выбрать последний статус для всех учетных записей, например:

  CREATE OR REPLACE FORCE VIEW "HR"."ETATACTUELCOMPTES"  
 ("id_statut", "num_compte") AS 
      select r2."id_statut",r2."num_compte" from 
            (
              select "num_compte",max("createdAt") createdAt 
              from "AvoirStatuts" 
              group by "num_compte"
            ) r1, "AvoirStatuts" r2 
            where 
               r1."num_compte"=r2."num_compte" 
               and r1.createdAt=r2."createdAt";

я хочу ускорить этот запрос с помощью индексов, поэтому я создал такой индекс

  create index creation_index on "AvoirStatuts" 
       ("num_compte","createdAt" desc );

но запрос не использует этот индекс, я не знаю почему!

enter image description here

Источник
Bob Jarvis - Reinstate Monica
8 апреля 2018 в 05:07
1

Сколько строк у вас в таблице "AvoirStatuts"? Если их всего несколько, оптимизатор может решить, что быстрее прочитать всю таблицу и просмотреть ее, чем использовать индекс. Операция FULL TABLE SCAN в плане имеет стоимость всего 5, поэтому ее будет сложно улучшить.

Ответы (1)

avatar
krokodilko
8 апреля 2018 в 05:15
1

Создать этот индекс:

create index covering_index on "AvoirStatuts" 
       ("num_compte","createdAt", "id_statut");