【发布时间】:2018-08-07 12:54:40
【问题描述】:
我正在用 PHP 从 MySQL 数据库中读取一个表。我使用 fetch_assoc() 一次获取一行结果。我发现虽然获取速度很快,但将数组解析为变量(使用 list() 函数或索引数组)确实很慢,即使使用 SplFixedArray。以下是包含一些计时指标的代码:
$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
等等
所以每行获取(在第一行之后)都非常快。但是每次我将数组解析为变量时,速度都很慢,尤其是因为我要处理数千条记录。
关于如何加快速度有什么建议吗?
【问题讨论】:
-
你为什么要做
list() -
将数组解析为变量(使用 list() 函数我猜完全没有必要。这些值已经在数组中,所以从那里使用它们!这样就省去了所有耗时的代码部分
-
一次获取所有行,或者将其限制为 200 行,然后全部获取,然后在获取后迭代它们。 php.net/manual/en/pdostatement.fetchall.php
-
您确定您计算的执行时间正确吗?看起来非常复杂且容易出错……=_=
-
我的另一个猜测是你正在做
list(),因为你正在做SELECT *,如果是这样的话,将选择更改为只选择你想要的,这也会加快获取速度也不需要list()