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

用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);   

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

 

 

转载于:https://www.cnblogs.com/youlechang123/p/3774127.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值