我正在开发一种算法,用于对多个巨大的数组进行密集计算。现在我已经使用 PHP 数组来完成这项工作,但是它似乎比我需要的要慢。我正在考虑使用 MySQLi 表并将 php 数组转换为数据库行,然后开始计算以解决速度问题。
第一步,当我将一个 20*10 的 PHP 数组转换为 200 行包含零的数据库时,花了很长时间。这是代码:(如果您有兴趣知道,基本上下面的代码会生成一个零矩阵)
$stmt = $mysqli->prepare("INSERT INTO `table` (`Row`, `Col`, `Value`) VALUES (?, ?, '0')");
for($i=0;$i<$rowsNo;$i++){
for($j=0;$j<$colsNo;$j++){
//$myArray[$j]=array_fill(0,$colsNo,0);
$stmt->bind_param("ii", $i, $j);
$stmt->execute();
}
}
$stmt->close();
注释掉的行 "$myArray[$j]=array_fill(0,$colsNo,0);" 在接下来的两行填写表格时会非常快地生成数组,需要很长时间。
阵列时间:0.00068 秒
MySQLi 时间:25.76 秒
剩下的计算量还有很多,即使修改了很多部分,我也很担心它可能会变得更糟。我搜索了很多,但我找不到任何关于数组是更好的选择还是 mysql 表的答案?有没有人做过或知道这方面的任何基准测试?
我真的很感激任何帮助。
提前致谢
更新:
我对 273*273 矩阵进行了以下测试。我为相同的数据创建了两个版本。第一个是二维 PHP 数组,第二个是 273*273=74529 行的表,两者都包含相同的数据。以下是从两者中检索相似数据的速度测试结果[在这里,找出某一行的哪些列的值等于 1 - 其他列为零]:
- 阵列花费了0.00021 秒。
- mysqli 表耗时0.0026 秒。(慢 10 倍以上)
我的结论是坚持使用数组而不是将它们转换为数据库表。
最后要说的是,如果提到的数据首先存储在数据库表中,生成一个数组然后使用它会慢得多,如下所示(由于从数据库中检索数据而变慢):
- 阵列花费了 0.9 秒。(慢 400 倍以上)
- mysqli 表耗时 0.0021 秒。