I have been able to optimize large table UPDATES with JOINS by separating the UPDATE and JOIN into two queries. I know the UPDATES are logged, but by creating a temporary table I have greatly reduced my UPDATE time by joining with the temporary table that contains only the records I am interested in updating.
However, I believe the biggest reason for the success of this strategy is because the command: SELECT INTO #TempTable is NOT logged and treated as a BULK copy in the log file. I do not care about dirty reads as this is a Datawarehouse type of situation. Does anyone know if SELECT INTO Table or SELECT INTO #TempTable is stored in the transaction log with the data?