快速提问(希望如此)
我有一个大型数据集(>100,000 条记录),我想将其用作查找以确定多个键的存在或不存在。这样做的目的是在尝试将它们提交到数据库之前找到 FK 违规,以避免由此产生的 EDatabaseError 弄乱我的事务。
我一直在使用带有 FindKey 方法的 TClientDataSet/TDatasetProvider,因为这允许设置客户端索引并且速度更快(扫描每个键需要 2 秒,而不是 ADO 需要 10 秒)。但是,迁移到大型数据集,CDS 的填充开始花费的时间远远超过本地索引所节省的时间。
我看到我有一些替代方案:
- 带有 TADOQuery.locate 方法的客户端游标
- 每次检查的 ADO SELECT 语句(无客户端缓存)
- ADO SEEK 方法
- 扩展 TADOQuery 以模仿 FindKey
Locate 方法似乎最简单,并且不会使用 SELECT/SEEK 方法向服务器发送垃圾邮件。我喜欢扩展 TADOQuery 的想法,但想知道是否有人知道任何现成的解决方案,而不是必须创建自己的解决方案?