我正在开发一种用于在多个巨大阵列上进行强烈计算的算法。现在我已经使用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 - 其他列为零]:
我的结论是坚持数组而不是将它们转换为数据库表。
最后要说的是,如果提到的数据首先存储在数据库表中,生成数组然后使用它会慢得多,如下所示(由于从数据库中检索数据而变慢): / p>
答案 0 :(得分:1)
主要原因不是数据库本身速度较慢。主要原因是数据库访问硬盘驱动器来存储数据,而PHP函数只使用RAM内存来执行这个程序,它比硬盘驱动器更快。
答案 1 :(得分:0)
虽然有一种方法可以加快插入查询(很可能你是在没有事务的情况下使用innodb表),但问题的陈述是错误的。
首先用于存储数据的数据库。永久存储它。它做得很好。它也可以进行计算,但是在进行任何计算之前还有一个必要的步骤 - 存储数据 如果你想对存储的数据进行计算 - 可以使用数据库 如果你想在数据库中推送你的数据来计算它 - 它没有多大意义。
答案 2 :(得分:-1)
就我而言,如问题的更新部分所示,我认为数组的性能优于mysql数据库。
即使我搜索单元格以连续找到所需的值,数组使用的响应速度也提高了10倍。即使是良好的表索引也无法超越阵列的功能和速度。