2009-07-24 33 views
1

我在我的数据库中有一个表,其中有大约200行数据需要检索。在一次查询中同时检索所有这些查询时效率的差异,还是单独查询中的每一行,效果会有多大?检索一个查询中的所有行或单独检索每行的效率差异?

+0

你需要他们吗? – Gumbo 2009-07-24 17:48:31

+0

是的,我需要他们。 – 2009-07-24 17:48:48

+0

那你为什么要一个一个选择它们? – Gumbo 2009-07-24 17:49:50

回答

6

查询通常是通过套接字进行的,所以执行200个查询而不是1个代表大量的开销,再加上RDBMS被优化为为一个查询获取大量的行。

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

只执行一个查询会好得多。

0

一般来说,您希望最小化对数据库的调用次数。您已经可以假定MySQL已经过优化以检索行,但是您无法确定您的调用是否已经过优化(如果有的话)。

0

非常显着,通常一次获取所有行将花费尽可能多的时间获取一行。所以我们假设时间是1秒(非常高但对插图有好处),那么获取所有行需要1秒钟,单独获取每行需要200秒(每行1秒)非常大的差异。这不包括你从哪里得到200开头的名单。

1

我认为这种差异会很明显,因为在解析和执行查询,将数据打包回送等方面会有很多开销比一次。

通常编写一个快速测试,其中有多种方法,然后您可以比较有意义的统计数据。

0

所有这一切说,你只有200行,所以在实践中并不重要。

但是,仍然要立即将它们全部取出。

1

如果您在讨论一些不断查询的问题k与更多的常量查询k+k1,您可能会发现更多的查询更好。我不确定,但是SQL有各种不寻常的怪癖,所以如果有人能够提出这样的场景,我不会感到惊讶。

但是,如果你正在谈论一些不变的查询数k与一些非固定数量的查询n,你应该总是选择不变的查询数选项。

0

正如其他人所说的。你的关系型数据库不会在你一次性抛出200 +++++行的汗水。获取一个关联数组中的所有行也不会对您的脚本产生太大影响,因为您无疑已经有一个抓取每个单独行的循环。

所有你需要做的就是修改这个循环通过你给出的阵列来迭代[非常小调整!]

0

我发现的唯一的一次更好地得到来自多个查询,而不是一个大组较少的结果是否需要对结果进行大量处理。通过打破设置的结果,我能够从结果集中删除大约40,000条记录(加上相关的处理)。任何可以构建到查询中的任何东西都可以让数据库执行处理并减少结果集大小,这是一个好处,但如果您真的需要所有行,只需去获取它们即可。

相关问题