Double check how you define your Primary Key. Make sure it is CASE SENSITIVE.
You can check out the DEBUG page to see that "Case Sensitive" SQL looks like:
where table.pk = upload.pk
While "Case Insensitive" SQL (even for numbers) looks like:
where upper(table.pk) = upper(upload.pk)
Also, for large amounts of data, don't use the Data Load Wizard.
Use Excel2Collection and INSERT...SELECT or MERGE
The Data Load Wizard does things that will make an experienced DB Developer cringe.
The final step of processing data when using the Data Load Wizard is inherently slow.
If you want it to go fast, you need to use something else.
(These observations were done over a year ago)
If you look at the DEBUG page after you load the data (from 3rd page to final page), you will notice one (or two) DEBUG entries for each row of data.
In the DB Developer world, this is known as "slow-by-slow" processing.
Other tests of mine make me believe that the Data Load Wizard calls COMMIT after processing each row.
This only compounds the speed issue.
If I recall correctly, the fastest time for processing a row was 5ms (ie my hard-drive access time)
At 5ms per row: 5,000 rows will take at least 25 s to process.