Oracle will not read all the index; only the index blocks needed to satisfy the particular query. The number of blocks will depend on the depth of the index; rarely more than three have I seen in practice, for a single lookup.
Here is an example, using a big version of the EMP table. BIGEMP contains just under 2M rows:
select count(*) from bigemp
;
COUNT(*)
----------
1835008
I have created a unique index, called IDX1 on empno. Now I can examine the BLEVEL (which is what I was referring to as depth above) and the number of leaf blocks:
select index_name, blevel, leaf_blocks
from user_indexes
where index_name = 'IDX1'
;
INDEX_NAME BLEVEL LEAF_BLOCKS
-------------------- ---------- -----------
IDX1 2 3947
So this tells me that this index has a root node, and then two level below that. So this mean that to find a unique row from the table, it should only take 4 IO's. That is the index root block, the two leaf blocks, and then another IO to the table to get the actual rows. This can be verified using autotrace
SQL> set autotrace on
SQL> select empno, ename, sal
2 from bigemp
3 where empno = 12345
4 /
EMPNO ENAME SAL
---------- ---------- ----------
12345 Scott 3000
Execution Plan
----------------------------------------------------------
Plan hash value: 3460625844
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 15 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| BIGEMP | 1 | 15 | 3 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | IDX1 | 1 | | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("EMPNO"=12345)
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
4 consistent gets
1 physical reads
0 redo size
682 bytes sent via SQL*Net to client
551 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
Sure enough, 4 consistent gets.
Oracle does also support "hash indexing" - called hash clusters. However, for transactional systems, there is a big maintenance penalty on them, so they are rarely used in these systems.