True,
Indexed allocation provides faster access to the required block but it is not very space efficient.
All the pointer to the blocks of the file is stored in one separate block(Index block). So any block(if it is free) can be allocated to file & it's pointer will be stored in index block. In this way it do prevent the External Fragmentation. But Internal fragmentation is still possible in last block as well as in index block if they are not fully filled.