【发布时间】:2016-01-27 23:00:35
【问题描述】:
我有两个表:Exam (ExamID, Date, Modality) 和 CT(ctdivol, ExamID(FK)),括号中的属性。
注意:CT 表有大约 100 000 个条目。
我想计算特定日期间隔内 ctdivol 的平均值。
我有这段代码可以运行,但是太慢了:
function get_CTDIvolAVG($min, $max) {
$values = 0;
$number = 0;
$query = "SELECT (unix_timestamp(date)*1000), examID
from exam use index(dates)
where modality = 'CT'
AND (unix_timestamp(date)*1000) between '" . $min . "' AND '" . $max . "';";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
while($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
$avg = "SELECT SUM(ctdivol_mGy), count(ctdivol_mGy)
from ct use index(ctd)
where examID ='" . $line["examID"] ."'
AND ctdivol_mGy>0;";
$result1 = mysql_query($avg) or die('Query failed: ' . mysql_error());
while ($ct = mysql_fetch_array($result1, MYSQL_ASSOC)) {
$values = $values + floatval($ct["SUM(ctdivol_mGy)"]);
$number = $number + floatval($ct["count(ctdivol_mGy)"]);
}
}
if ($number!=0) {
echo $values/$number;
}
}
我怎样才能让它更快?
【问题讨论】:
-
这最好在我们的会员网站上专门针对dba experts 询问,哦,我没有投反对票。
-
您是否有sqlfiddle.com 的示例日期和预期结果
-
避免SQL内部循环变慢;使用 SQL 代替 PHP 进行聚合
-
请停止使用已弃用的 mysql_ 函数,改用 pdo 或 mysqli。
标签: php mysql sql query-performance