我想知道当我们调用 perl dbi api 来查询数据库时,是否所有结果都返回?或者我们是否获得了部分结果集,并且随着我们迭代,我们从数据库中检索越来越多的行。
我问的原因是我在 perl 脚本中注意到以下内容。
我对返回大量记录的数据库进行了查询。获得这些记录后,我for
对结果进行了循环并创建了hash
这些数据。
我注意到,来自数据库的实际查询在合理的时间内返回(结果很多),但很大的延迟是循环数据以创建散列。
我不明白这一点。我希望查询将是缓慢的部分,因为 for 循环和哈希的构造将在内存中并且很便宜。
任何解释/想法为什么会发生这种情况?我在这里误解了一些基本的东西吗?
更新
我知道 MySQL 缓存数据,所以当我多次运行相同的查询时,第二次会更快。但我仍然不希望内存中数据集的 for 循环与对 MySQL DB 的查询具有相同(甚至更多)的持续时间。
问问题
92 次
1 回答
1
假设您使用的是 DBD::mysql,默认是一次从服务器中提取所有结果并将它们存储在内存中。这避免了占用服务器的资源,并且对于大多数结果集都可以正常工作,因为 RAM 通常是充足的。
这回答了您最初的问题,但如果您需要更多帮助,我建议您粘贴代码 - 您的哈希构建代码可能做错了什么,或者正在进行不必要的查询。另请参阅加速 DBI以获取有关有效使用 DBI API 以及如何分析 DBI 正在做什么的提示。
于 2013-09-28T23:01:11.623 回答