phpmyadmin 打开数据表较多,数据量较大的数据库时出现超时的解决办法

时间:2022-09-23 23:30:29

用phpmyadmin打开数据表较多,数据量较大的数据库时,会出现超时,或者等半天打开了说数据库没有表。并且即便打开了,再进行其他浏览,编辑,sql等操作,页面也是相当慢的,慢等几乎无法忍受。这里慢也就慢在取得表状态的 SHOW TABLE STATUS 语句。SHOW TABLE STATUS 返回表的名字,类型,列数,大小,时间等相关信息。这些信息不要也罢。下面着手改以下两个地方就可以了。

以 phpMyAdmin 3.1.2 为例(不同版本可能会有差异):

打开 libraries/Table.class.php
查找

PHP代码
  1. if (! isset(PMA_Table::$cache[$db][$table][$info]) || $force_read) {   

可以看到

PHP代码
  1. if (! isset(PMA_Table::$cache[$db][$table][$info]) || $force_read) {   
  2.             PMA_Table::$cache[$db][$table] = PMA_DBI_fetch_single_row('SHOW TABLE STATUS FROM ' . PMA_backquote($db) . ' LIKE \'' . $table . '\'');   
  3.         }   

这里是左边数据表列表时用到的
改成

PHP代码
  1. if (! isset(PMA_Table::$cache[$db][$table][$info]) || $force_read) {   
  2.             //PMA_Table::$cache[$db][$table] = PMA_DBI_fetch_single_row('SHOW TABLE STATUS FROM ' . PMA_backquote($db) . ' LIKE \'' . $table . '\'');   
  3.             PMA_Table::$cache[$db][$table] = array('Name'=>$table);   
  4.         }   

左边数据表导航鼠标放上去会出现一些表创建时间,最近更新时间等信息。这些信息要不要都行。

打开 libraries/database_interface.lib.php
查找

foreach ($databases as $each_database) {
可以看到

PHP代码
  1. if (true === $tbl_is_group) {   
  2.                 $sql = 'SHOW TABLE STATUS FROM '  
  3.                     . PMA_backquote($each_database)   
  4.                     .' LIKE \'' . PMA_escape_mysql_wildcards(addslashes($table)) . '%\'';   
  5.             } else {   
  6.                 $sql = 'SHOW TABLE STATUS FROM '  
  7.                     . PMA_backquote($each_database);   
  8.             }   
  9.     
  10.             $each_tables = PMA_DBI_fetch_result($sql'Name', null, $link);   

改成

PHP代码
  1. if (true === $tbl_is_group) {   
  2.                 $sql = 'SHOW TABLE STATUS FROM '  
  3.                     . PMA_backquote($each_database)   
  4.                     .' LIKE \'' . PMA_escape_mysql_wildcards(addslashes($table)) . '%\'';   
  5.                 $each_tables = PMA_DBI_fetch_result($sql'Name', null, $link);   
  6.             } else {   
  7.                 //$sql = 'SHOW TABLE STATUS FROM '   
  8.                 $sql = 'SHOW TABLES FROM '  
  9.                     . PMA_backquote($each_database);   
  10.                 $each_tables = PMA_DBI_fetch_result($sql'Tables_in_'.$each_database, null, $link);   
  11.             foreach ($each_tables as $key=>$row){   
  12.                 $each_tables[$key]['Name'] = $row['Tables_in_'.$each_database];   
  13.             }   
  14.             }   
  15.     
  16.             //$each_tables = PMA_DBI_fetch_result($sql, 'Name', null, $link);   

改完后右边显示数据表名,其他记录数,类型,大小等信息都不能正常显示。因为没有计算记录数,浏览链接也没有了。可以点击左边的数据表导航来浏览。这样改后应该一进去不多久就能显示出来。

phpmyadmin 打开数据表较多,数据量较大的数据库时出现超时的解决办法