If I am wrong please rectify me.

If I give the following command

SELECT bytes FROM dba_segments WHERE segment_name = :your_table_name;

It gives me the space occupied by the table. Not the actually occupied by the data. To find actually occupied by the data we need to multiply blocks from DBA_TABLES with DB_BLOCK_SIZE.

But for INDEX if I give the following command

SELECT bytes FROM dba_segments WHERE segment_name = :your_index_name;

Will it give me the actual space occupied by index.

For more specific example, if I specify initial and next as 2MB for table creation, and after that I insert some records in the table, then the following command gives me

SELECT bytes FROM dba_segments WHERE segment_name = :your_table_name;

the result 2MB.

But actually space occupied by data is .01 MB which is blocks (which is 1) * 8k (db_block_size)

In the similar way if I create an index with initial and next as 2MB.

SELECT bytes FROM dba_segments WHERE segment_name = :your_index_name;

command gives me 2MB. Are you telling me that the Index it self has taken complete space of 2MB...?