The record parsing of external tables and SQL*Loader is very similar, so normally there is not a major performance difference for the same record format. However, due to the different architecture of external tables and SQL*Loader, there are situations in which one method may be more appropriate than the other.
Use external tables for the best load performance in the following situations:
You want to transform the data as it is being loaded into the database
You want to use transparent parallel processing without having to split the external data first
Use SQL*Loader for the best load performance in the following situations:
You want to load data remotely
Transformations are not required on the data, and the data does not need to be loaded in parallel
You want to load data, and additional indexing of the staging table is required