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

作者: 我不是鱼 (2010-03-03 21:11)分类: PHP   标签: 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);   

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

评论 (11) | 浏览 (98950)

前一篇: 使用$_REQUEST 要留意的地方
后一篇: MySQL log 文件清理


评论

如果系数据表的数据太大好似冇几多办法啪?到几百万就。。。
蓝雨 2010-04-08 17:08

文章这么少啊。
[游客]towry 2010-07-13 15:51

牛逼啊。
[游客]tunpishuang 2010-09-04 23:02

[游客]tunpishuang tunpishuang tunpis 2010-09-04 23:02

和 www.abm163.com 是 PHP的吗
lihao2589 2011-05-17 02:17

1

添加评论

昵称:


博主


« 2020年-12月 »
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2

分类


热门标签


最近留言


概要

  • 文章数量: 41
  • 分类数量: 9
  • 标签数量: 73
  • 评论数量: 159
  • 浏览次数: 3236495

友情链接