Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.69.2.4
diff -u -r1.69.2.4 system.install
--- modules/system/system.install	19 Jul 2007 05:39:25 -0000	1.69.2.4
+++ modules/system/system.install	11 Sep 2007 00:02:13 -0000
@@ -302,14 +302,16 @@
       db_query("CREATE TABLE {flood} (
         event varchar(64) NOT NULL default '',
         hostname varchar(128) NOT NULL default '',
-        timestamp int NOT NULL default '0'
+        timestamp int NOT NULL default '0',
+        INDEX (timestamp)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {history} (
         uid int NOT NULL default '0',
         nid int NOT NULL default '0',
         timestamp int NOT NULL default '0',
-        PRIMARY KEY (uid,nid)
+        PRIMARY KEY (uid,nid),
+        INDEX (timestamp)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       db_query("CREATE TABLE {menu} (
@@ -577,7 +579,8 @@
         hostname varchar(128) NOT NULL default '',
         timestamp int NOT NULL default '0',
         PRIMARY KEY (wid),
-        KEY (type)
+        KEY (type),
+        INDEX (timestamp)
       ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
 
       break;
@@ -769,6 +772,7 @@
         hostname varchar(128) NOT NULL default '',
         timestamp int NOT NULL default '0'
       )");
+      db_query("CREATE INDEX {flood}_timestamp_idx ON {flood} (timestamp)");
 
       db_query("CREATE TABLE {history} (
         uid int NOT NULL default '0',
@@ -776,6 +780,7 @@
         timestamp int NOT NULL default '0',
         PRIMARY KEY (uid,nid)
       )");
+      db_query("CREATE INDEX {history}_timestamp_idx ON {history} (timestamp)");
 
       db_query("CREATE TABLE {menu} (
         mid serial CHECK (mid >= 0),
@@ -1045,6 +1050,7 @@
         PRIMARY KEY (wid)
       )");
       db_query("CREATE INDEX {watchdog}_type_idx ON {watchdog} (type)");
+      db_query("CREATE INDEX {watchdog}_timestamp_idx ON {watchdog} (timestamp)");
       break;
   }
 
@@ -3513,6 +3519,26 @@
 }
 
 /**
+ * Add indexes on timestamp columns that are deleting with full table scans.
+ */
+function system_update_1023() {
+  $ret = array();
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      $ret[] = update_sql('ALTER TABLE {flood} ADD INDEX (timestamp)');
+      $ret[] = update_sql('ALTER TABLE {history} ADD INDEX (timestamp)');
+      $ret[] = update_sql('ALTER TABLE {watchdog} ADD INDEX (timestamp)');
+      break;
+    case 'pgsql':
+      $ret[] = update_sql('CREATE INDEX {flood}_timestamp_idx ON {flood} (timestamp)');
+      $ret[] = update_sql('CREATE INDEX {history}_timestamp_idx ON {history} (timestamp)');
+      $ret[] = update_sql('CREATE INDEX {watchdog}_timestamp_idx ON {watchdog} (timestamp)');
+      break;
+  }
+  return $ret;
+}
+/**
  * @} End of "defgroup updates-5.x-extra"
  */
 
