在这里寻找一些想法......我有一个 MySQL 表,其中包含 100K 行测试数据。
我正在使用 PHP 脚本从该表中获取行,在这个测试案例中,该脚本正在获取所有 100,000 行(对大型数据集进行一些分析和优化)。
我连接到数据库,并执行一个无缓冲的查询:
$result = mysql_unbuffered_query("SELECT * FROM TestTable", $connection) or die('Errant query: ' . $query);
然后我用以下方法迭代结果:
if ($result) {
while($tweet = mysql_fetch_assoc($result)) {
$ctr++;
if ($ctr > $kMAX_RECORDS) {
$masterCount += $ctr;
processResults($results);
$results = array();
$ctr = 1;
}
$results[] = array('tweet' => $tweet);
}
echo "<p/>FINISHED GATHERING RESULTS";
}
function processResults($resultSet) {
echo "<br/>PROCESSED " . count($resultSet) . " RECORDS";
}
$kMAX_RECORDS = 40000 现在,所以我希望看到如下输出:
已处理 40000 条记录
已处理 40000 条记录
已处理 20000 条记录
已完成收集结果
但是,我一直看到:
已处理 39999 条记录
已处理 40000 条记录
已完成收集结果
如果我在 $ctr++ 之后立即添加 $ctr 的输出,我会得到完整的 100K 记录,所以在我看来,这似乎是某种时间问题或使用 MYSQL_FETCH_ASSOC 从后端获取数据的问题。
在相关的说明中,while 循环中的代码在那里,因为在像这样分解 $results 数组之前,while 循环只会在大约 45000 条记录(每次都在同一个地方)时结束。这是由于我错过了某个地方的设置吗?
感谢您的任何意见......只需要一些关于在哪里寻找答案的想法。
干杯!