博主


« 2017年-12月 »
26 27 28 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 3 4 5 6

分类


热门标签


最新评论


最近留言


最近访客


概要

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

友情链接

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) | 浏览 (87974)

前一篇: 使用$_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

长知识了
天使宝宝 2013-11-18 11:31

精品推荐
http://www.jztuan.net 荆楚虚拟商城 免费入驻 商城无限
http://www.hyyingxiao.com
http://www.hyyingxiao.com/bxw
http://www.008bxw.com
welcomedhy 2014-10-08 02:38

精品推荐
http://www.jztuan.net
http://www.lingxianwz.com
http://www.hyyingxiao.com
welcomedhy 2015-04-12 10:07

1

添加评论

登陆 注册  昵称: