代码之家  ›  专栏  ›  技术社区  ›  James Skidmore

在一个查询中检索所有行或单独检索每一行的效率不同?

  •  1
  • James Skidmore  · 技术社区  · 16 年前

    我的数据库中有一个表,其中有大约200行数据需要检索。在一个查询中同时检索所有查询的效率与在单独查询中分别检索每一行的效率有多大差别?

    8 回复  |  直到 16 年前
        1
  •  6
  •   FWH    16 年前

    这些查询通常是通过一个套接字进行的,因此执行200个查询而不是1个查询代表了大量的开销,而且RDBMS经过优化以获取一个查询的大量行。

    200个查询而不是1个查询将使RDBMS初始化数据集、解析查询、获取一行、填充数据集,并将结果发送200次而不是1次。

    最好只执行一个查询。

        2
  •  1
  •   Tom Haigh    16 年前

    我认为这两者之间的差异将是非常显著的,因为(我猜)在解析和执行查询、打包数据以发送回等方面会有很多开销,您将为每一行而不是一次这样做。

    通常,编写一个快速测试来测试各种方法的时间,然后您就可以比较有意义的统计数据。

        3
  •  1
  •   Spencer Ruport    16 年前

    如果你说的是一些固定数量的查询 k 与大量的常量查询相比 k+k1 您可能会发现更多的查询更好。我不确定,但是SQL有各种各样的异常特性,所以如果有人能想出这样的场景,我不会感到惊讶。

    但是,如果您谈论的是一些恒定数量的查询 K 与一些非常量查询相比 n 您应该总是选择常量查询选项。

        4
  •  0
  •   AlbertoPL    16 年前

    通常,您希望最小化对数据库的调用次数。您已经可以假定mysql是为了检索行而优化的,但是您不能确定您的调用是优化的(如果有的话)。

        5
  •  0
  •   Solmead    16 年前

    非常重要,通常一次获取所有行与获取一行花费的时间相同。所以让我们假设时间是1秒(非常高,但很好地用于说明),那么获得所有行将需要1秒,获得每行将需要200秒(每行1秒)一个非常显著的差异。这不算你从哪里得到200人的名单。

        6
  •  0
  •   CCC    16 年前

    尽管如此,你只有200行,所以在实践中这并不重要。

    但是,还是要一次把它们都拿出来。

        7
  •  0
  •   Etzeitet    16 年前

    正如其他人所说。你的RDBMS不会一下子就向你扔200+在一个关联数组中获取所有行对脚本也没有多大影响,因为毫无疑问,您已经有了一个循环来获取每个单独的行。

    你所需要做的就是修改这个循环来迭代你得到的数组[非常小的调整!]

        8
  •  0
  •   acrosman    16 年前

    唯一一次我发现从多个查询而不是一个大的集合中得到更少的结果更好的是,如果要对结果进行大量处理的话。我通过打破结果集,从结果集(加上相关处理)中删除了大约40000条记录。您可以在查询中构建任何允许DB进行处理并减少结果集大小的内容都是一个好处,但是如果您真正需要所有行,只需获取它们即可。

    推荐文章