我一直在研究一个相当大的C ++项目,它令人惊讶地使用MS Access 97作为它的底层数据库引擎。我注意到代码中有很多实例,其中记录集是从可能返回超过100,000条记录的查询中创建的。
我很好奇ADO是否会在构建记录集时将所有数据存入内存,或者它是否更智能并且只能在您尝试从记录集中读取数据时“及时”加载数据?我们收到了很多客户的性能投诉,这看起来很可疑。
(迁移到更新的数据库引擎是我们的路线图。相信我,团队中没有人对Access感到满意)
答案 0 :(得分:1)
此处使用Access进行数据库存在以下几个问题:
答案 1 :(得分:1)
我很好奇ADO是否会在构建记录集时将所有数据存入内存,或者它是否更智能并且只能在您尝试读取时“及时”加载数据记录集?
或许异步提取行可以改善用户的体验。请参阅ExecuteOptionEnum中可与ADO Recordset Open Method一起使用的选项。我怀疑这是“及时”的想法,但这是我能提供的最好的。
在我看来,更好的设计是修改查询以仅检索100K行的子集。然后“及时”可能变成“让用户请求下一个子集”。而且你应该能够通过合理大小的记录集从Access获得不错的性能。