diff --git user_import.module user_import.module
index a185e06..cc62932 100644
--- user_import.module
+++ user_import.module
@@ -1430,8 +1430,11 @@
                 // if we update existing users matched by email (and therefore passed validation even if this email already exists)
                 // look for and use an existing account.
                 if ($update_setting && !empty($fields['user']['email'][0])) {
-                  $existing_account = user_load(array('mail' => $fields['user']['email'][0]));
-                  if ($existing_account) $account = (array) $existing_account; 
+                  $uid = _user_import_find_userid($fields['user']['email'][0]);
+                  
+                  if ($uid > 0 && $existing_account = user_load($uid)) {
+                    $account = (array) $existing_account;
+                  }
                 }
                
                 // if $account['uid'] is not empty then we can assume the account is being updated
@@ -1637,6 +1640,32 @@
   
   return $settings_updated;
 }
+
+/**
+ * Looks up the given mail address in the users table faster
+ * than user_load() would
+ * 
+ * @param string $mail
+ * @return int User ID, 0 if no user found
+ */
+function _user_import_find_userid($mail) {
+  global $db_type;
+  
+  if ($db_type == 'mysql' || $db_type == 'mysqli') {
+    // Assume case-insensitivity
+    $result = db_result(db_query('SELECT uid FROM {users} WHERE mail = "%s"', $mail));
+  } elseif ($db_type == 'pgsql') {
+    $result = db_result(db_query('SELECT uid FROM {users} WHERE mail ILIKE "%s"', $mail));
+  } else {
+    $result = false;
+  }
+  
+  if ($result) {
+    return intval($result);
+  }
+  
+  return 0;
+}
 
 /**
  * Loads the hooks for the supported modules.
