How can I delete duplicates records in a table efficiently I know there are several options to delete duplicate rows,  eg:


ROWID
Analytical fn's like Rank(), row_number()


What would be the most efficient way?
If you can afford to have a temporary table, then creating new table with the distinct values of the old one is a lot faster that deleting the rows. Something like:

create table no_dupes
as 
select min(id) as id,
       col_a,
       col_b,
       col_c,
       min(col_d) as col_d,
       min(col_e) as col_e
from table_with_dupes
group by col_a, col_b, col_c;


Of course this has the drawback of needing to re-recreate all indexes and constraints. But in my experience it way faster - especially if you are deleting a large number of rows in a large table.