diff --git a/includes/webform.submissions.inc b/includes/webform.submissions.inc
index 2daff39..932d487 100644
--- a/includes/webform.submissions.inc
+++ b/includes/webform.submissions.inc
@@ -675,17 +675,24 @@ function webform_get_submissions($filters = array(), $header = NULL, $pager_coun
   }
 
   // Query the required submission data.
-  $query = db_select('webform_submissions', 's');
-  $query->leftJoin('webform_submitted_data', 'sd', 'sd.sid = s.sid');
+  $query = db_select('webform_submitted_data', 'sd');
+  $query->leftJoin('webform_submissions', 's', 's.sid = sd.sid');
   $query->leftJoin('users', 'u', 'u.uid = s.uid');
   $query
     ->fields('s')
     ->fields('sd', array('cid', 'no', 'data'))
     ->fields('u', array('name'))
-    ->condition('s.sid', $sids, 'IN')
+    ->condition('sd.sid', $sids, 'IN')
     ->orderBy('sd.sid', 'ASC')
     ->orderBy('sd.cid', 'ASC')
     ->orderBy('sd.no', 'ASC');
+
+  // By adding the NID to this query we allow MySQL to use the primary key on
+  // the table for sorting (nid_sid_cid_no).
+  if (isset($filters['nid'])) {
+    $query->condition('sd.nid', $filters['nid']);
+  }
+
   $result = $query->execute();
 
   // Convert the queried rows into submissions.
@@ -770,7 +777,7 @@ function webform_get_submission($nid, $sid, $reset = FALSE) {
 
   // Load the submission if needed.
   if (!isset($submissions[$sid])) {
-    $new_submissions = webform_get_submissions(array('sid' => $sid));
+    $new_submissions = webform_get_submissions(array('nid' => $nid, 'sid' => $sid));
     $submissions[$sid] = $new_submissions[$sid];
   }
 
diff --git a/webform.install b/webform.install
index a80b24e..194e52e 100644
--- a/webform.install
+++ b/webform.install
@@ -322,6 +322,7 @@ function webform_schema() {
     ),
     'indexes' => array(
       'nid_uid_sid' => array('nid', 'uid', 'sid'),
+      'nid_sid' => array('nid', 'sid'),
     ),
   );
 
@@ -612,7 +613,7 @@ function webform_update_7310() {
 }
 
 /**
- * Add an index for sid_nid_uid to webform_submissions.
+ * Add an index for nid_uid_sid to webform_submissions.
  */
 function webform_update_7311() {
   if (!db_index_exists('webform_submissions', 'nid_uid_sid')) {
@@ -717,3 +718,14 @@ function webform_update_7316() {
     db_add_field('webform', 'total_submit_interval', array('type' => 'int', 'not null' => TRUE, 'default' => -1));
   }
 }
+
+/**
+ * Add an index for 'nid_sid' to webform_submissions.
+ */
+function webform_update_7317() {
+  // Even though we already have an index 'nid_uid_sid', adding the index for
+  // 'nid_sid' saves us a tablesort on the node/x/webform-results page.
+  if (!db_index_exists('webform_submissions', 'nid_sid')) {
+    db_add_index('webform_submissions', 'nid_sid', array('nid', 'sid'));
+  }
+}
