我在我的数据库中有一个表,其中有大约200行数据需要检索。在一次查询中同时检索所有这些查询时效率的差异,还是单独查询中的每一行,效果会有多大?检索一个查询中的所有行或单独检索每行的效率差异?
回答
查询通常是通过套接字进行的,所以执行200个查询而不是1个代表大量的开销,再加上RDBMS被优化为为一个查询获取大量的行。
200个查询而不是1个会使RDBMS初始化数据集,解析查询,获取一行,填充数据集,并将结果发送200次而不是1次。
只执行一个查询会好得多。
一般来说,您希望最小化对数据库的调用次数。您已经可以假定MySQL已经过优化以检索行,但是您无法确定您的调用是否已经过优化(如果有的话)。
非常显着,通常一次获取所有行将花费尽可能多的时间获取一行。所以我们假设时间是1秒(非常高但对插图有好处),那么获取所有行需要1秒钟,单独获取每行需要200秒(每行1秒)非常大的差异。这不包括你从哪里得到200开头的名单。
我认为这种差异会很明显,因为在解析和执行查询,将数据打包回送等方面会有很多开销比一次。
通常编写一个快速测试,其中有多种方法,然后您可以比较有意义的统计数据。
所有这一切说,你只有200行,所以在实践中并不重要。
但是,仍然要立即将它们全部取出。
如果您在讨论一些不断查询的问题k
与更多的常量查询k+k1
,您可能会发现更多的查询更好。我不确定,但是SQL有各种不寻常的怪癖,所以如果有人能够提出这样的场景,我不会感到惊讶。
但是,如果你正在谈论一些不变的查询数k
与一些非固定数量的查询n
,你应该总是选择不变的查询数选项。
正如其他人所说的。你的关系型数据库不会在你一次性抛出200 +++++行的汗水。获取一个关联数组中的所有行也不会对您的脚本产生太大影响,因为您无疑已经有一个抓取每个单独行的循环。
所有你需要做的就是修改这个循环通过你给出的阵列来迭代[非常小调整!]
我发现的唯一的一次更好地得到来自多个查询,而不是一个大组较少的结果是否需要对结果进行大量处理。通过打破设置的结果,我能够从结果集中删除大约40,000条记录(加上相关的处理)。任何可以构建到查询中的任何东西都可以让数据库执行处理并减少结果集大小,这是一个好处,但如果您真的需要所有行,只需去获取它们即可。
- 1. 最有效的方法来检索相关数据行:子查询,或单独的查询与GROUP BY?
- 2. 使用php的mysql查询不检索表中的所有行
- 3. GridView检索每一行中的数据
- 4. mysql_fetch_array不检索所有行
- 5. Oracle查询 - 检索下一行
- 6. PHP检索,而不是检索所有表行的同一行多次
- 7. SQL查询从另一个表中检索每列的所有值?
- 8. MySQL _在单个查询中检索多个行和列
- 9. 创建一个查询来检索Mysql中的某些行
- 10. C#LDAP查询检索组织单位中的所有用户
- 11. 检索所有IDS其中`name` LIKE%current_name在一个查询
- 12. 检索一些具有前两个日期差异超过120秒的SQL行
- 13. 检索今天插入的所有行
- 14. 检索编号为1的所有行
- 15. VBA:从Range.Area中的每一行中检索单元值
- 16. 检索表单中的查询数据
- 17. 检索从SQLCE所有行的单个取
- 18. 检索自从上次查询MySQL以来的差异数据
- 19. 与laravel和查询生成器检索列的差异为2
- 20. .net火灾查询来检查有效的查询和检索列名
- 21. 查询检索的股票从一个单一的一天
- 22. 'Open'或'ExecSQL'在执行之前检测到查询差异
- 23. SQL SELECT查询不从一个简单的Access数据库中检索行
- 24. 检索一个表内行所有输入字段的值
- 25. SQL查询检索DISTINCT行左加入
- 26. 用pyqt在postgres中检索一行中的所有记录
- 27. SQL查询检索我想要的值,存储到一行中
- 28. 从GridView中检索一行
- 29. MYSQL多个查询或单个查询 - 哪个更有效率
- 30. MySQL中,需要一个查询来检索表的多个领域一行
你需要他们吗? – Gumbo 2009-07-24 17:48:31
是的,我需要他们。 – 2009-07-24 17:48:48
那你为什么要一个一个选择它们? – Gumbo 2009-07-24 17:49:50