Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 19033)
+++ wp-includes/functions.php	(working copy)
@@ -1899,32 +1899,35 @@
 	if ( $installed )
 		return true;
 
+	// If visiting repair.php, return true and let it take over.
+	if ( defined( 'WP_REPAIRING' ) )
+		return true;
+
 	$suppress = $wpdb->suppress_errors();
-	$tables = $wpdb->get_col('SHOW TABLES');
-	$wpdb->suppress_errors( $suppress );
 
-	$wp_tables = $wpdb->tables();
 	// Loop over the WP tables.  If none exist, then scratch install is allowed.
 	// If one or more exist, suggest table repair since we got here because the options
 	// table could not be accessed.
+	$wp_tables = $wpdb->tables();
 	foreach ( $wp_tables as $table ) {
-		// If one of the WP tables exist, then we are in an insane state.
-		if ( in_array( $table, $tables ) ) {
-			// The existence of custom user tables shouldn't suggest an insane state or prevent a clean install.
-			if ( defined( 'CUSTOM_USER_TABLE' ) && CUSTOM_USER_TABLE == $table )
-				continue;
-			if ( defined( 'CUSTOM_USER_META_TABLE' ) && CUSTOM_USER_META_TABLE == $table )
-				continue;
+		// The existence of custom user tables shouldn't suggest an insane state or prevent a clean install.
+		if ( defined( 'CUSTOM_USER_TABLE' ) && CUSTOM_USER_TABLE == $table )
+			continue;
+		if ( defined( 'CUSTOM_USER_META_TABLE' ) && CUSTOM_USER_META_TABLE == $table )
+			continue;
 
-			// If visiting repair.php, return true and let it take over.
-			if ( defined('WP_REPAIRING') )
-				return true;
-			// Die with a DB error.
-			$wpdb->error = sprintf( /*WP_I18N_NO_TABLES*/'One or more database tables are unavailable.  The database may need to be <a href="%s">repaired</a>.'/*/WP_I18N_NO_TABLES*/, 'maint/repair.php?referrer=is_blog_installed' );
-			dead_db();
-		}
+		if ( ! $wpdb->get_results( "DESCRIBE $table;" ) )
+			continue;
+
+		// One or more tables exist. We are insane.
+
+		// Die with a DB error.
+		$wpdb->error = sprintf( /*WP_I18N_NO_TABLES*/'One or more database tables are unavailable.  The database may need to be <a href="%s">repaired</a>.'/*/WP_I18N_NO_TABLES*/, 'maint/repair.php?referrer=is_blog_installed' );
+		dead_db();
 	}
 
+	$wpdb->suppress_errors( $suppress );
+
 	wp_cache_set( 'is_blog_installed', false );
 
 	return false;
