快速提问(希望如此)
我有一个大型数据集(> 100,000条记录),我想用它来查找多个键的存在或不存在。这样做的目的是在尝试将它们提交到数据库之前找到FK违规,以尝试避免由此产生的EDatabaseError搞乱我的事务。
我一直在使用TClientDataSet / TDatasetProvider和FindKey方法,因为这允许设置客户端索引并且更快(扫描每个键2s而不是ADO 10s)。但是,转移到大型数据集后,CDS的数量开始比本地索引节省的时间要多得多。
我看到我有一些备选方案可供选择:
Locate方法似乎最简单,并且不会使用SELECT / SEEK方法向服务器发送垃圾邮件。我喜欢扩展TADOQuery的想法,但想知道是否有人知道任何现成的解决方案,而不是自己创建?
答案 0 :(得分:2)
我会在数据库服务器中创建一个临时表。将所有100,000条记录插入此临时表中。一次批量插入3000条记录,以最大限度地减少到服务器的往返。然后在此临时表上运行select语句以检查外键违规等。如果一切正常,请将临时表中的SQL插入主表。