Index: includes/path.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/path.inc,v retrieving revision 1.37 diff -u -r1.37 path.inc --- includes/path.inc 26 May 2009 09:12:28 -0000 1.37 +++ includes/path.inc 31 May 2009 11:33:21 -0000 @@ -96,7 +96,7 @@ // For system paths which were not cached, query aliases individually. else if (!isset($no_aliases[$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(); @@ -111,7 +111,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()) { Index: modules/system/system.install =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.install,v retrieving revision 1.332 diff -u -r1.332 system.install --- modules/system/system.install 27 May 2009 18:34:01 -0000 1.332 +++ modules/system/system.install 31 May 2009 18:07:10 -0000 @@ -1329,11 +1329,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'), ), ); @@ -3496,6 +3496,18 @@ } /** + * Improve indexes on the {url_alias} table. + */ +function system_update_7024() { + $ret = array(); + db_drop_index($ret, 'url_alias', 'src_language'); + db_drop_index($ret, 'url_alias', 'dst_language'); + db_add_index($ret, 'url_alias', 'dst_language_pid', array('dst', 'language', 'pid')); + db_add_index($ret, 'url_alias', 'src_language_pid', array('src', 'language', 'pid')); + return $ret; +} + +/** * @} End of "defgroup updates-6.x-to-7.x" * The next series of updates should start at 8000. */