--- includes/path.inc	3 Apr 2009 17:41:32 -0000	1.33
+++ includes/path.inc	8 Apr 2009 08:42:12 -0000
@@ -68,7 +68,7 @@
         return $map[$path_language][$path];
       }
       // Get the most fitting result falling back with alias without language
-      $alias = db_query("SELECT dst FROM {url_alias} WHERE src = :src AND language IN(:language, '') ORDER BY language DESC", array(
+     $alias = db_query("SELECT dst FROM {url_alias} WHERE src = :src AND language IN(:language, '') ORDER BY language DESC, pid DESC", array(
         ':src' => $path,
         ':language' => $path_language))
         ->fetchField();
@@ -82,7 +82,7 @@
       $src = '';
       if (!isset($map[$path_language]) || !($src = array_search($path, $map[$path_language]))) {
         // Get the most fitting result falling back with alias without language
-        if ($src = db_query("SELECT src FROM {url_alias} WHERE dst = :dst AND language IN(:language, '') ORDER BY language DESC", array(
+        if ($src = db_query("SELECT src FROM {url_alias} WHERE dst = :dst AND language IN(:language, '') ORDER BY language DESC, pid DESC", array(
                      ':dst' => $path,
                      ':language' => $path_language))
             ->fetchField()) {
--- modules/system/system.install	3 Apr 2009 17:50:21 -0000	1.314
+++ modules/system/system.install	8 Apr 2009 08:40:56 -0000
@@ -1254,11 +1254,11 @@
       ),
     ),
     'unique keys' => array(
-      'dst_language' => array('dst', 'language'),
+      'dst_language_pid' => array('dst', 'language', 'pid'),
     ),
     'primary key' => array('pid'),
     'indexes' => array(
-      'src_language' => array('src', 'language'),
+      'src_language_pid' => array('src', 'language', 'pid'),
     ),
   );
 
@@ -3253,12 +3253,19 @@
 
 /**
  * Enable field module.
+ * Improve indexes on the {url_alias} table.
+ * Add language and pid columns to indexes to improve performance.
  */
 function system_update_7020() {
   $ret = array();
   $module_list = array('field_sql_storage', 'field');
   drupal_install_modules($module_list);
   module_enable($module_list);
+
+  db_drop_unique_key($ret, 'url_alias', 'dst_language');
+  db_add_unique_key($ret, 'url_alias', 'dst_language_pid', array('dst', 'language', 'pid'));
+  db_drop_index($ret, 'url_alias', 'src_language');
+  db_add_index($ret, 'url_alias', 'src_language_pid', array('src', 'language', 'pid'));
   return $ret;
 }
 

