Php 哪个更快:在数组中还是数据库查询?

Php 哪个更快:在数组中还是数据库查询?,php,mysql,performance,Php,Mysql,Performance,哪个更快 我将SQL结果存储在一个数组中,这意味着1000个或更多ID。然后我使用in_array()函数30次来找出数据库中的MyID 我检查数据库中是否有MyID,然后重复30次 测试结果: 我肯定地说,一次性获取阵列中的所有ID要比查询MySQL服务器30次快得多。我肯定地说一次性获取阵列中的所有ID要比查询MySQL服务器30次快得多。您提出的解决方案似乎都不正确。你应该看看MySQL的。这样,您就可以在一个查询中对多个值执行WHERE,如下所示: SELECT something

哪个更快

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

  • 我检查数据库中是否有MyID,然后重复30次

  • 测试结果:
    我肯定地说,一次性获取阵列中的所有ID要比查询MySQL服务器30次快得多。

    我肯定地说一次性获取阵列中的所有ID要比查询MySQL服务器30次快得多。

    您提出的解决方案似乎都不正确。你应该看看MySQL的。这样,您就可以在一个查询中对多个值执行
    WHERE
    ,如下所示:

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

    你提出的两个解决方案似乎都不对。你应该看看MySQL的。这样,您就可以在一个查询中对多个值执行
    WHERE
    ,如下所示:

    SELECT something FROM table WHERE id IN(1, 4, 5, ...)
    
    改为使用(键、值)关联数组(实际上所有数组在PHP中都是关联的,但这不是重点)。将数组的键设置为ID,每个值(例如)为1

    测试ID是否在数组中

    if (isset($ids[ ID ])) {
       // yes it is 
    }
    
    以这种方式使用数组非常快,因为键在内部存储为树-

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

    测试ID是否在数组中

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

    这种方式使用数组速度非常快,因为密钥在内部存储为一棵树-

    您自己尝试过计时吗?检测任何方法所需的时间都很容易,而不是问为什么不在数据库中搜索所有ID,然后在其中创建一个in_数组?类似于
    “从MyID所在的myTable中选择*”(“.intlode(“,”,$ids)。”)”
    您尝试过使用单个查询吗?例如,
    从mytable中选择*,其中id位于(1,5,2,7)中。如果id为1、5、2和7的用户尚未存在,则这将返回数据库中的所有行。我发现:你试过自己计时吗?检测任何方法所需的时间都很容易,而不是问为什么不在数据库中搜索所有ID,然后在其中创建一个in_数组?类似于
    “从MyID所在的myTable中选择*”(“.intlode(“,”,$ids)。”)”
    您尝试过使用单个查询吗?例如,
    从mytable中选择*,其中id位于(1,5,2,7)中。如果id为1、5、2和7的用户尚未存在,则这将返回数据库中的所有行。我发现:……但还有其他选择。。看评论谢谢!记忆呢?对于可接受的性能,该数组中可以有多少个整数?(我的资源有限。)这取决于很多事情。。。。整数是32位还是64位?如果是32位的话,您可以自动获得比64位的两倍的数据。取决于可用内存的数量和类型。没有非黑即白的答案:)……但还有其他选择。。看评论谢谢!记忆呢?对于可接受的性能,该数组中可以有多少个整数?(我的资源有限。)这取决于很多事情。。。。整数是32位还是64位?如果是32位的话,您可以自动获得比64位的两倍的数据。取决于可用内存的数量和类型。没有黑或白的答案:)但我需要所有的“东西”。我按ID显示表1的数据。如果表2中有更多的数据具有相同的ID,它会修改内容。。。我认为最好在查询中使用连接,但是Table1的数据已经在内存中了。是的,听起来你应该使用连接,也许类似于
    从table2中选择一些东西,然后在Table1.foreign=table2.id中使用Table1.id(1,2,3,…)
    但是我需要所有的“东西”。我按ID显示表1的数据。如果表2中有更多的数据具有相同的ID,它会修改内容。。。我认为最好在查询中使用连接,但是Table1的数据已经在内存中了。是的,听起来你应该使用连接,可能类似于
    从table2中选择一些东西,在Table1.foreign=table2.id,其中Table1.id在(1,2,3,…)
    是的,它更快:)1:0.0079531669616699;1.1本:0.0025970935821533;2: 0.0030391216278076; 谢谢你是的,它更快:)1:0.0079531669616699;1.1本:0.0025970935821533;2: 0.0030391216278076; 非常感谢。