我正在从PHP中的MySQL数据库读取一个表。我使用fetch_assoc()一次获取一行结果。我发现尽管获取速度很快,但即使使用SplFixedArray,将数组解析为变量(使用list()函数或对数组建立索引)的速度也确实很慢。这是包含一些计时指标的代码:
$stupid = new SplFixedArray(15);
while ($row = $result->fetch_assoc()) {
$time_post = microtime(true);
$exec_time = $time_post - $time_pre;
$time_pre = $time_post;
echo (' Row Fetch: ' . $exec_time . '<br><br>');
$stupid = $row;
list ($category, $entity, $link, $channel, $text_date, $description, $tempe, $printo, $web, $watchlisten,
$location, $title, $by, $page, $eventdate) = $stupid;
echo "<br><br>";
$time_post = microtime(true);
$exec_time = $time_post - $time_pre;
$time_pre = $time_post;
echo (' List parsing: ' . $exec_time . '<br><br>');
}
这将产生以下输出:
行获取:0.013195037841797
列表解析:0.024664163589478
行获取:1.5974044799805E-5
列表解析:0.016013860702515
行获取:1.5020370483398E-5
列表解析:0.017437934875488
行提取:1.9073486328125E-5
列表解析:0.019788026809692
等
因此,每行提取(在第一个之后)都非常快。但是每次我将数组解析为变量时,速度都非常慢,特别是因为我正在处理数千条记录。
关于如何加快速度的任何建议?
答案 0 :(得分:0)
我不确定这为什么行得通,但是可以将事情加速到几乎瞬间:
$everything = implode("|", $row);
list ($category, $entity, $link, $channel, $text_date, $description, $tempe,
$printo, $web, $watchlisten, $location, $title, $by, $page, $eventdate) =
explode("|", $everything);
我的猜测是数组$ row包含混合类型的元素,并且通过它们进行解析会导致系统陷入困境。将所有内容转换为字符串然后放回数组后,分配数组元素真的很容易。至少那是我的猜测。