I'd say that moving a gb of data in a single query in 3 minutes is decent, if not great, performance. What is the user doing with 2 million rows of data?
"The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood"
- Theodore Roosevelt
Author of:
SQL Server Execution Plans
SQL Server Query Performance Tuning