【问题标题】:Which is faster: in_array or database queries?哪个更快:in_array 或数据库查询?
【发布时间】:2013-03-23 16:52:20
【问题描述】:

哪个更快?

  1. 我将 SQL 结果存储在一个数组中 - 这意味着 1000 个或更多 ID。然后我使用 in_array() 函数 30 次找出 MyID 在数据库中。

  2. 我检查 MyID 是否在数据库中并重复 30 次。

测试结果:

48 records (MyID)

Array count: 1704 (ID) (Table size: 100 000)

Delta time:

Method 1: 0.0075759887695312

Method 2: 0.0038831233978271

【问题讨论】:

  • 你试过自己计时吗?
  • 检测任何方法所需的时间很容易,而不是询问
  • 为什么不直接在数据库中搜索你所有的 id,然后在其中创建一个 in_array 呢?喜欢'SELECT * FROM myTable WHERE MyID IN ('.implode(',', $ids).')'
  • 您是否尝试过使用 single 查询?例如。 SELECT * FROM mytable WHERE id IN (1,5,2,7);。这将返回数据库中 ID 为 1、5、2 和 7 的用户的所有行如果存在
  • 还没有。我发现了这个:stackoverflow.com/questions/3493105/…

标签: php mysql performance


【解决方案1】:

我肯定会说,一次将所有 ID 放入数组中会比查询 MySQL 服务器 30 次快得多。

【讨论】:

  • ...但还有其他选择.. 见 cmets
  • 谢谢!内存呢?我可以在该数组中有多少个整数以获得可接受的性能? (我的资源有限..)
  • 嗯,这取决于很多事情.... 32 位或 64 位整数?如果是 32 位,您可以自动拥有比 64 位多一倍的数量。取决于可用内存的数量和类型。真的没有黑白答案:)
【解决方案2】:

您提出的解决方案似乎都不对。您应该查看 MySQL 的IN clause。有了这个,您可以WHERE 在单个查询中获取多个值,如下所示:

SELECT something FROM table WHERE id IN(1, 4, 5, ...)

【讨论】:

  • 但我需要所有的“东西”。我按 ID 显示 Table1 的数据。如果我在 Table2 中有更多具有相同 ID 的数据,它会修改一些东西......我认为在查询中使用 JOINT 会更好,但 Table1 的数据已经在内存中。
  • 是的,听起来你应该使用 JOIN,也许像 SELECT something FROM table2 LEFT JOIN table1 ON table1.foreign = table2.id WHERE table1.id IN(1, 2, 3, ..)
【解决方案3】:

使用 (key,value) 关联数组代替(实际上所有数组在 PHP 中都是关联的,但这不是重点)。将数组的keys设置为ID,每个值为(例如)1。

$ids = array();
For all ID from database {
   $ids[ ID ] = 1;
}

测试ID是否在数组中

if (isset($ids[ ID ])) {
   // yes it is 
}

以这种方式使用数组非常快,因为键在内部存储为树 - the search complexity is ~ O(1)

【讨论】:

  • 是的,它更快:) 1.: 0.0079531669616699; 1.1 这个:0.0025970935821533; 2:0.0030391216278076;谢谢
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2012-02-08
  • 2014-05-12
  • 2014-03-07
相关资源
最近更新 更多