Я очень новичок в Oracle, исследуя вещи, читая о доступе к индексу, я пришел к выводу, что, предположим, у меня есть таблица emp.
table emp
---------------------------
empno ename salary mgrid
---------------------------
1 ab 200 2
2 bn 900 3
3 bh 900 1
4 ah 890 4
5 kk 67 0
6 ac 9090
и вот как создается уникальный индекс по первичному ключу emno
index table(suppose)
--------------------
rowid index value
---------------------
xyzz 1
- 2
- 3
- 4
- 5
- 6
где «-» означает некоторое шестнадцатеричное значение, предположим, я пишу запрос, который
select * from emp where empno ='5'
затем он выберет идентификатор строки, соответствующий значению индекса 5, и извлечет строку, соответствующую 5 empno, из таблицы emp.
Теперь я сомневаюсь, что здесь он извлекается из index_table, но чтобы найти rowid, он также сканирует всю таблицу (index_table) до 5, и тот же самый rowid использует для поиска строки, тогда чем он отличается от таблицы без индекса? ,там тоже сканируем всю таблицу до 5 емпно.
единственное преимущество - индексы хранятся в порядке возрастания.
я знаю, что ошибаюсь, но может кто-нибудь объяснить это
**Doubt**
Сканирует ли полная таблица, сканирует ли каждый столбец строк независимо от состояния фильтра? давайте возьмем запрос, который я использовал выше, если в этой таблице нет первичного ключа emp, тогда он выполнит полное сканирование таблицы, затем для empno=5 он будет сканировать каждое значение empno строки или он будет сканировать empname,salary и мргид тоже?