Php 将mysql\u查询与mysql\u fetch\u行一起使用时的性能问题
我不太熟悉mySQL和php。帮助朋友解决他们的性能问题 它们有一个名为report.php的文件,该文件查询数据库,然后输出查询中的所有行和列 当多个用户执行报告时,此执行似乎会锁定数据库并导致CPU使用率达到100%。这里有什么明显的我遗漏的吗 report.php的结构如下所示Php 将mysql\u查询与mysql\u fetch\u行一起使用时的性能问题,php,mysql,Php,Mysql,我不太熟悉mySQL和php。帮助朋友解决他们的性能问题 它们有一个名为report.php的文件,该文件查询数据库,然后输出查询中的所有行和列 当多个用户执行报告时,此执行似乎会锁定数据库并导致CPU使用率达到100%。这里有什么明显的我遗漏的吗 report.php的结构如下所示 include('../settings2.inc'); $type=$_GET['report']; if(isset($_GET['report'])) { switch($type){ c
include('../settings2.inc');
$type=$_GET['report'];
if(isset($_GET['report']))
{
switch($type){
case uuppgroup: $export=mysql_query("select * from uuppgroupdetails order by id");
break;
case Beneficiary: $export=mysql_query("select * from uupp_ben_details order by ben_id");
break;
(many other switch cases over here
..
..
}
$fields = mysql_num_fields ( $export );
for ( $i = 0; $i < $fields; $i++ )
{
$header .= mysql_field_name( $export , $i ) . "\t";
}
while( $row = mysql_fetch_row( $export ) )
{
$line = '';
foreach( $row as $value )
{
if ( ( !isset( $value ) ) || ( $value == "" ) )
{
$value = "\t";
}
else
{
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data ); }
$vExcelFileName=$type.".xls";
#$vExcelFileName="export". ".doc";
header("Content-type: application/x-ms-download"); //#-- build header to download the excel file
header("Content-Disposition: attachment; filename=$vExcelFileName");
header('Cache-Control: public');
print "$header\n$data";
/*
}
确保包括:
mysql_close($dbcon);
如果这些文件是定期生成的,为了停止对数据库的不断获取,如果您每30分钟/小时运行一次CRON作业来生成这些文件,然后当有人请求时,可以在您选择的文件夹中找到这些文件,例如/downloads/reports/受益人.pdf
由于您的代码从各个部分看起来都很好,所以我最好的猜测是您的一些其他查询可能会破坏它。我唯一能猜到的是,当多个用户同时从数据库请求数据时,它在尝试处理时挂起,因此100%的cpu使用率显示select语句使用的表,因为主要原因可能是*而不是您需要的几列。另外,请使用pdo而不是mysql函数,原因一是它将被弃用,原因二是您可以移植到另一个sql,如postgresqlIt,应该作为注释而不是答案。这并不能解决问题,这只是一个信息。你可以看到我只有39个,我不能评论。然而,如果他尝试了这个方法,并且确实解决了这个问题,那么这就是一个答案,否则他可以对此进行评论,并寻求进一步的帮助。我现在正在查看他的代码,看看还有什么可以实现的。所以你需要赢得声誉,但你不应该发表评论作为答案。如果你做不到,如果你没有可能的解决方案或解释就不要做。你的答案必须经过编辑。我一直在尝试,我昨天已经开始回答了大约10个问题,其中2个被认为是正确的,但如果人们把它看作是评论,而不是答案,它将被否决,你将失去声誉!