库MySQLi查询与PHP数组,这是更快?(MySQLi query vs PHP Array, w

2019-10-18 03:17发布

我开发了多个巨大的数组激烈计算的算法。 现在,我已经使用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秒的阵列。
  • 花了0.0026秒为mysqli的表。 (超过10倍慢)

我的结论是坚持到阵列,而不是将它们转换成数据库表。

最后要说的,在情况下,所提及的数据被存储在数据库表中的第一位,产生的阵列,然后使用这将是更慢得多,如下所示(由于较慢的从数据库检索数据):

  • 花了0.9秒的阵列。 (超过400倍更慢)
  • 花了0.0021秒为mysqli的表。

Answer 1:

主要的原因不在于数据库本身较慢。 主要的原因是数据库访问的硬盘驱动器来存储数据和PHP函数只使用RAM的内存来执行此过程,至极比硬盘驱动器更快。



Answer 2:

虽然有一种方法,以加快您的插入查询(最可能是你正使用InnoDB表,而交易),问题的非常说法是错误的。

数据库预期-在首位- 存储数据。 要永久保存。 它确实很好。 它可以做计算过,但再次 - 做任何计算之前,有一个必须的步骤 - 存储数据。
如果你想要做一个存储的数据你的计算 - 这是确定使用一个数据库。
如果你想要把数据库中的数据只计算它 - 它使没有太大的意义。



Answer 3:

在我的情况下,显示在问题的更新的一部分,我认为阵列具有比MySQL数据库更好的性能。

阵列的使用表明快10倍的响应,甚至当我搜索过的细胞发现在一排所需的值。 即使是好表的索引打不着阵列的功能和速度。



文章来源: MySQLi query vs PHP Array, which is faster?