是否存在包含客户端索引的TADOQuery扩展

时间:2013-06-06 11:09:30

标签: delphi indexing ado delphi-2006

快速提问(希望如此)

我有一个大型数据集(> 100,000条记录),我想用它来查找多个键的存在或不存在。这样做的目的是在尝试将它们提交到数据库之前找到FK违规,以尝试避免由此产生的EDatabaseError搞乱我的事务。

我一直在使用TClientDataSet / TDatasetProvider和FindKey方法,因为这允许设置客户端索引并且更快(扫描每个键2s而不是ADO 10s)。但是,转移到大型数据集后,CDS的数量开始比本地索引节省的时间要多得多。

我看到我有一些备选方案可供选择:

  • 使用TADOQuery.locate方法的客户端游标
  • 每次检查的ADO SELECT语句(无客户端缓存)
  • ADO SEEK方法
  • 扩展TADOQuery以模仿FindKey

Locate方法似乎最简单,并且不会使用SELECT / SEEK方法向服务器发送垃圾邮件。我喜欢扩展TADOQuery的想法,但想知道是否有人知道任何现成的解决方案,而不是自己创建?

1 个答案:

答案 0 :(得分:2)

我会在数据库服务器中创建一个临时表。将所有100,000条记录插入此临时表中。一次批量插入3000条记录,以最大限度地减少到服务器的往返。然后在此临时表上运行select语句以检查外键违规等。如果一切正常,请将临时表中的SQL插入主表。