Почему этот запрос приводит к TABLE ACCESS FULL, а не FULL INDEX SCAN? - PullRequest
0 голосов
/ 21 мая 2018
create table indexTest(
 col1 NUMBER,
 col2 NUMBER,
 COL3 NUMBER);

 create index indexTest_INX on indexTest(col2,col3);

анализировать индекс indexTest_INX проверять структуру;

выбрать col2, col3 из indextest;

enter image description here

1 Ответ

0 голосов
/ 21 мая 2018

Причина очень проста.Столбцы определены как NULLable, поэтому оптимизатор запросов не может использовать индекс покрытия.Чтобы получить INDEX FULL SCAN , вы можете использовать:

create index indexTest_INX on indexTest(col2,col3,0);
                              -- at least one NOT NULL column or literal

или изменить столбцы таблицы как NOT NULL.

DBFiddle Demo

Выход:

select col2,col3 from indextest;

---------------------------------------------------
| Id  | Operation        | Name          | E-Rows |
---------------------------------------------------
|   0 | SELECT STATEMENT |               |        |
|   1 |  INDEX FULL SCAN | INDEXTEST_INX |      1 |
---------------------------------------------------
...