MySQLi查询vs PHP数组,哪个更快?

时间:2013-05-07 23:59:04

标签: php arrays mysqli benchmarking performance-testing

我正在开发一种用于在多个巨大阵列上进行强烈计算的算法。现在我已经使用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倍)

我的结论是坚持数组而不是将它们转换为数据库表。

最后要说的是,如果提到的数据首先存储在数据库表中,生成数组然后使用它会慢得多,如下所示(由于从数据库中检索数据而变慢): / p>

  • 阵列需要0.9秒。 (慢了400多倍)
  • mysqli table花了0.0021秒。

3 个答案:

答案 0 :(得分:1)

主要原因不是数据库本身速度较慢。主要原因是数据库访问硬盘驱动器来存储数据,而PHP函数只使用RAM内存来执行这个程序,它比硬盘驱动器更快。

答案 1 :(得分:0)

虽然有一种方法可以加快插入查询(很可能你是在没有事务的情况下使用innodb表),但问题的陈述是错误的。

首先用于存储数据的数据库。永久存储它。它做得很好。它也可以进行计算,但是在进行任何计算之前还有一个必要的步骤 - 存储数据 如果你想对存储的数据进行计算 - 可以使用数据库 如果你想在数据库中推送你的数据来计算它 - 它没有多大意义。

答案 2 :(得分:-1)

就我而言,如问题的更新部分所示,我认为数组的性能优于mysql数据库。

即使我搜索单元格以连续找到所需的值,数组使用的响应速度也提高了10倍。即使是良好的表索引也无法超越阵列的功能和速度。