使用二叉搜索树搜索超过100万个加载的SQL行

时间:2018-05-27 06:04:44

标签: c# sql binary-search-tree hashcode large-data

我的应用程序用C#编写,并从数据库加载超过1百万行。出于某种原因,我必须执行此初始加载,然后我将在加载的行内搜索而不是查询SQL,并且每个列都有大数据(每行大约500个字符),并且每列具有不同的类型。对于搜索,我必须检查所选记录中的数据与其他记录中的3个特定列的相等性。

我认为使用二进制搜索树可以快速完成,因为现在,使用嵌套for循环(2个循环)需要几分钟。如果我可以将数据放在正确的结构中,那么使3个HashCode列将创建唯一的整数数据并将其放入BST中。

我不知道任何结构都适合这种假设。 主要问题是,这个假设是否正确?或者只是梦见?

1 个答案:

答案 0 :(得分:1)

将内存中的数据编入索引是一个好主意。看来你正在基于平等进行访问,例如row.SomeKey == mySearchKey。哈希表可以在O(1)中执行此操作。将数据推送到Dictionary或使用ToLookup。性能将非常出色(一个CPU内核每秒访问量达到1000万次)。

如果您需要访问范围,那么还有一个框架类,内部使用红黑树。它是SortedSet/SortedDictionary