在大型数据集中搜索项目的最有效方法

Most efficient way to search large dataset for item

以前可能有人问过这个问题,但我没能找到相同的场景。

我得到了一个巨大的 SQL 单列字符串数据集(即包含公司分支机构的城市)。

我还得到了一个更大的字符串主数据集(即世界上所有城市)。

第一个数据集每天都在变化。我需要每天 运行 通过这个来检查是否每个字符串都可以在主数据集中找到。

我无法控制任何一个数据集的设计。

我试过:

Foreach (cityRow in dailyDS.Tables[0].Rows)
{
     DataRow[] row = masterDs.Tables[0].Select("City like '%" + (string)cityRow["City"] + "%'");
}

并使用 linq(比 select 语句快得多)

Foreach (cityRow in dailyDS.Tables[0].Rows)
{
     DataRow existingRow = masterDs.Tables[0].AsEnumerable().Where(row => row.Field<string>("City") == (string)cityRow["City"]).FirstOrDefault();
}

我的程序的全部目的是生成一个城市列表,其中当前有一个公司分支机构不在主城市列表中(即,它们拼写错误等)我已经编写了程序但是只想知道:

在这样的数据集中搜索精确值的最有效方法是什么?

如果你想快速拥有它,你必须将世界上所有城市加载到一个HashSet<string>

然后为每个 cityOfCompany 检查 HashSet.Contains(cityOfCompany)

只需 23k 个字符串来检查这在现代 PC 上应该 运行 几秒钟。