Index: includes/bootstrap.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/bootstrap.inc,v
retrieving revision 1.419
diff -u -p -r1.419 bootstrap.inc
--- includes/bootstrap.inc	16 Sep 2010 01:10:38 -0000	1.419
+++ includes/bootstrap.inc	16 Sep 2010 01:48:23 -0000
@@ -2593,7 +2593,6 @@ function drupal_get_schema($table = NULL
       // On some databases this function may be called before bootstrap has
       // been completed, so we force the functions we need to load just in case.
       if (function_exists('module_load_all_includes')) {
-
         // There is currently a bug in module_list() where it caches what it
         // was last called with, which is not always what you want.
         // module_load_all_includes() calls module_list(), but if this function
@@ -2601,7 +2600,7 @@ function drupal_get_schema($table = NULL
         // uninitialized and therefore return no modules. Instead, we have to
         // "prime" module_list() here to to values we want, specifically
         // "yes rebuild the list and don't limit to bootstrap".
-        // TODO: Remove this call after http://drupal.org/node/222109 is fixed.
+        // @todo Remove this call after http://drupal.org/node/222109 is fixed.
         module_list(TRUE, FALSE);
         module_load_all_includes('install');
       }
@@ -2613,7 +2612,9 @@ function drupal_get_schema($table = NULL
         // would cause array_merge() to set the $schema variable to NULL as well.
         // That would break modules which use $schema further down the line.
         $current = (array) module_invoke($module, 'schema');
-        _drupal_schema_initialize($module, $current);
+        // Set 'module' and 'name' keys for each table, and remove descriptions,
+        // as they needlessly slow down cache_get() for every single request.
+        _drupal_schema_initialize($current, $module, TRUE);
         $schema = array_merge($schema, $current);
       }
 
Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.1220
diff -u -p -r1.1220 common.inc
--- includes/common.inc	15 Sep 2010 04:34:26 -0000	1.1220
+++ includes/common.inc	16 Sep 2010 01:49:15 -0000
@@ -6002,7 +6002,7 @@ function drupal_common_theme() {
  */
 function drupal_install_schema($module) {
   $schema = drupal_get_schema_unprocessed($module);
-  _drupal_schema_initialize($module, $schema);
+  _drupal_schema_initialize($schema, $module);
 
   foreach ($schema as $name => $table) {
     db_create_table($name, $table);
@@ -6025,7 +6025,7 @@ function drupal_install_schema($module) 
  */
 function drupal_uninstall_schema($module) {
   $schema = drupal_get_schema_unprocessed($module);
-  _drupal_schema_initialize($module, $schema);
+  _drupal_schema_initialize($schema, $module);
 
   foreach ($schema as $table) {
     if (db_table_exists($table['name'])) {
@@ -6075,20 +6075,30 @@ function drupal_get_schema_unprocessed($
 /**
  * Fill in required default values for table definitions returned by hook_schema().
  *
- * @param $module
- *   The module for which hook_schema() was invoked.
  * @param $schema
  *   The schema definition array as it was returned by the module's
  *   hook_schema().
+ * @param $module
+ *   The module for which hook_schema() was invoked.
+ * @param $remove_descriptions
+ *   (optional) Whether to additionally remove 'description' keys of all tables
+ *   and fields (TRUE) to improve performance of serialize() and unserialize().
+ *   Defaults to FALSE.
  */
-function _drupal_schema_initialize($module, &$schema) {
+function _drupal_schema_initialize(&$schema, $module, $remove_descriptions = FALSE) {
   // Set the name and module key for all tables.
-  foreach ($schema as $name => $table) {
+  foreach ($schema as $name => &$table) {
     if (empty($table['module'])) {
-      $schema[$name]['module'] = $module;
+      $table['module'] = $module;
     }
     if (!isset($table['name'])) {
-      $schema[$name]['name'] = $name;
+      $table['name'] = $name;
+    }
+    if ($remove_descriptions) {
+      unset($table['description']);
+      foreach ($table['fields'] as &$field) {
+        unset($field['description']);
+      }
     }
   }
 }
