Code Bye

php+mysql环境下正在等待localhost的响应这个病怎么治呢

本地安装的php和mysql环境,用localhost访问某页面,该页面只是一个简单的链接mysql数据库并按以下sql语句执行查询并echo出数据,其中还用到了一个网上很流行的分页函数,每页显示20条数据,总的数据库有进30万条数据。
SELECT Id,col1,col2col3,col4,col5 FROM DBtable LIMIT 100,20;
这条语句在mysql任务窗口里面的执行时间只有0.01sec
但是要打开这个PHP页面却需要近1分钟时间,至少也要40秒。
打开页面时,一开始都在显示正在等待localhost的响应,然后就非常慢。
等地host文件本人已经加了127.0.0.1    localhost
my.ini文件内容如下:
basedir = L:/develop/mysql-5.6.24-win32
datadir = L:/develop/TestMysqlData
character_set_server=utf8
character_set_client=utf8
bind-address = 127.0.0.1
max_connections=100
负责链接数据库的config.php的执行时间也很短:[config.php页面执行时间:0.0050408840179443 ]秒
<?php
$stime22=microtime(true);
$host=”localhost”;
$db_user=”root”;
$db_pass=”123456″;
$db_name=”moive”;
$timezone=”Asia/Shanghai”;
$link=mysql_connect($host,$db_user,$db_pass);
mysql_select_db($db_name,$link);
mysql_query(“SET names UTF8”);
header(“Content-Type: text/html; charset=utf-8”);
$etime22=microtime(true);//获取程序执行结束的时间
$total22=$etime22-$stime22;   //计算差值
echo “<br />[config.php页面执行时间:{$total22} ]秒”;

?>
通过分析发现,该php页面中链接数据库后执行sql的时间长是罪魁祸首![执行sql时间:54.735748052597 ]秒
<?php
include_once(“config.php”);
require_once(“page.class.php”); //分页类【这是这个分页类的地址,未做任何改动。】
ini_set(“max_execution_time”,”100″);//防止出现PHP Fatal error:  Maximum execution time of 30 seconds
$showrow = 20; //一页显示的行数
$curpage = empty($_GET[“page”]) ? 1 : $_GET[“page”]; //当前的页,还应该处理非数字的情况
$url = “?page={page}”; //分页地址,假如有检索条件 =”?page={page}&q=”.$_GET[“q”]
//开始计时
$stime=microtime(true);

$sql = “SELECT Id,col1,col2col3,col4,col5 FROM DBtable LIMIT”;
$total = mysql_num_rows(mysql_query($sql)); //记录总条数
if (!empty($_GET[“page”]) && $total != 0 && $curpage > ceil($total / $showrow))
$curpage = ceil($total_rows / $showrow); //当前页数大于最后页数,取最后一页
//获取数据
$sql .= ” LIMIT ” . ($curpage – 1) * $showrow . “,$showrow;”;
$query = mysql_query($sql);
$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo “<br />[执行sql时间:{$total} ]秒”;

echo “<h1>[SQL:{$sql} ]</h1>”;
?>
网上查了一些关于等待响应时间过长的解决办法,经过尝试也无效。
请帮本人分析分析是什么原因呢?本人感觉主要是这个PHP等到mysql响应的时间很长,而实际执行sql语句的时间其实也是很快的,为什么会出现这种貌似找不到mysql的现象呢?
解决方案

100

引用:
Quote: 引用:

既然你说 :
SELECT Id,col1,col2col3,col4,col5 FROM DBtable LIMIT 100,20; 这个语句的时间很多,
那么问题可能就在于:
$total = mysql_num_rows(mysql_query($sql)); //记录总条数
也就是获取记录总条数的时间可能太长了。
建议进一步细化,把 $etime 和 $stime 放到 计算记录总条数的地方。
另外,你用的数据库引擎是innodb吧,最好给表建个索引,加快 count(*) 的速度

谢谢版主啊,本人把记录时间点放在这句前后,发现这一句才是罪魁祸首啊!
//开始计时
$stime=microtime(true);
$total = mysql_num_rows(mysql_query($sql)); //记录总条数
$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo “<br />[执行sql时间:{$total} ]秒”;
这一句也是这个分页类的原有语句,这是不是意味着要重新写分页类呢?这对本人是一个不可能完成的任务啊,本人才刚学来着。咋办呢?

给这个表 DBtable 的id字段创建一个索引试试


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明php+mysql环境下正在等待localhost的响应这个病怎么治呢