Индексы, EXPLAIN PLAN и доступ к записям в Oracle SQL

Я изучал индексы в Oracle SQL, и я хотел провести небольшой эксперимент с тестовой таблицей, чтобы увидеть, как индексы действительно работают. Как я обнаружил из более раннего сообщения, сделанного здесь, лучший способ сделать это - EXPLAIN PLAN. Однако я сталкиваюсь с чем-то, что меня смущает.

Моя примерная таблица содержит атрибуты (EmpID, Fname, Lname, Occupation и т. Д.). Я заполнил его 500 000 записей, используя написанную мной программу Java (случайные имена, профессии и т. Д.). А теперь вот несколько примеров запросов с индексами и без них:

NO INDEX:

SELECT Fname FROM EMPLOYEE WHERE Occupation = 'DOCTOR';

EXPLAIN PLAN говорит:

OPERATION                         OPTIMIZER COST
TABLE ACCESS(FULL) TEST.EMPLOYEE  ANALYZED  1169

Теперь я создаю индекс:

CREATE INDEX occupation_idx
    ON EMPLOYEE (Occupation);

WITH INDEX "activity_idx":

SELECT Fname FROM EMPLOYEE WHERE Occupation = 'DOCTOR';

EXPLAIN PLAN говорит:

OPERATION                         OPTIMIZER COST
TABLE ACCESS(FULL) TEST.EMPLOYEE  ANALYZED  1169

Итак ... стоимость ВСЕ ЕЩЕ та же, 1169? Теперь я пробую следующее:

С ИНДЕКСОМ "activity_idx":

SELECT Occupation FROM EMPLOYEE WHERE Occupation = 'DOCTOR';

EXPLAIN PLAN говорит:

OPERATION                              OPTIMIZER COST
INDEX(RANGE SCAN) TEST.OCCUPATION_IDX  ANALYZED  67

Итак, похоже, что индекс используется только тогда, когда этот столбец является единственным, из которого я беру значения. Но я думал, что смысл индекса в том, чтобы разблокировать всю запись, используя индексированный столбец в качестве ключа? Вышеупомянутый поиск довольно бессмысленный ... он ищет значения, которые вам уже известны. Единственный стоящий запрос, который я могу придумать, который ТОЛЬКО включает значение индексированного столбца (а не остальную часть записи), - это агрегат, такой как COUNT или что-то в этом роде.

Что мне не хватает?

5
задан OMG Ponies 17 November 2011 в 01:51
поделиться