我的数据库中有一个表,我需要检索大约200行数据。如果有的话,在一个查询中一次检索所有这些内容时的效率差异,与单独查询中的每一行相比,效果有多大?
答案 0 :(得分:6)
查询通常是通过套接字进行的,因此执行200个查询而不是1表示很多开销,而且RDBMS已经过优化,可以为一个查询获取大量行。
200个查询而不是1个将使RDBMS初始化数据集,解析查询,获取一行,填充数据集,并将结果发送200次而不是1次。
只执行一个查询会好得多。
答案 1 :(得分:1)
我认为差别很大,因为(我猜)在解析和执行查询,将数据打包以发送回等等方面会有很多开销,然后你会为每一行而不是一次。
编写一个快速测试通常很有用,这个测试可以使用各种方法,然后你就可以得到有意义的统计数据。
答案 2 :(得分:1)
如果您正在讨论一些恒定数量的查询k
而不是更多数量的常量查询k+k1
,您可能会发现更多查询更好。我不确定,但SQL有各种不寻常的怪癖,所以如果有人能想出这样的场景,我不会感到惊讶。
但是,如果您正在讨论一些恒定数量的查询k
与一些非常数的查询n
,则应始终选择常数查询选项。
答案 3 :(得分:0)
通常,您希望最小化对数据库的调用次数。您已经可以假设MySQL已经过优化以检索行,但是您无法确定您的调用是否已经过优化(如果有的话)。
答案 4 :(得分:0)
非常重要,通常一次获取所有行将花费与获取一行相同的时间。所以假设时间是1秒(非常高但是很适合插图)然后获得所有行将花费1秒钟,单独获得每行需要200秒(每行1秒)非常显着的差异。而且这还不计算你从哪里开始获得200的清单。
答案 5 :(得分:0)
所有这一切,你只有200行,所以在实践中它并不重要。
但是,请立刻把它们全部拿走。
答案 6 :(得分:0)
正如其他人所说的那样。你的RDBMS不会让你一次性输掉200 ++++行。获取一个关联数组中的所有行也不会对您的脚本产生太大影响,因为毫无疑问您已经拥有了一个用于获取每一行的循环。
你需要做的就是修改这个循环来迭代你给出的数组[非常小的调整!]
答案 7 :(得分:0)
我唯一一次发现从多个查询而不是一个大集合中获得更少的结果更好的是,如果要对结果进行大量处理。通过打破结果设置,我能够从结果集中删除大约40,000条记录(以及相关的处理)。你可以在查询中构建任何允许数据库进行处理并减少结果集大小的东西都是有益的,但是如果你真的需要所有的行,那就去吧。