【问题标题】:sql vs hashtable.containskey vs string.containssql vs hashtable.containskey vs string.contains
【发布时间】:2025-11-21 12:45:02
【问题描述】:

我有一个从 sql 查询中提取的值列表,以便找出其中是否存在 x 提供的值。

SQL:
  -Select null from table where code='x'
  -resul.count>0

String:
  -Loop for concatenating the codes in one string
  -codesstring.Contains("x")

Hashtable:
  -Loop for adding the codes to the hashtable
  -codeshashtable.ContainsKey("x")

列表将在数千范围内...最快的方法是什么?

【问题讨论】:

    标签: c# tsql string hashtable


    【解决方案1】:

    您不会在查询 1 和 2 中要求相同的内容。

    字符串是

    codestring.Equals('x')

    最快取决于什么。字符串循环:否

    哈希表 - 是的,已经加载了数千个(即您不必访问数据库)

    否则直接数据库。

    【讨论】:

    • codestring.Equals('x') 将始终返回 false,因为字符串是连接的代码...
    • 那么你用“where code='x'”给出的sql也会返回false。
    • "where code='x'" 查询值表(多行、多个代码,例如,code='a'、code='b' 等)。执行 codestring.Equals('x') 将针对单个字符串评估单个值 ('x')(例如:'abcdefghijklmnopqrstuvwxyz')。它们完全不同。
    【解决方案2】:

    只有 SQL 会阻止整个结果集从数据库传输到您的应用程序。在这一点上,这取决于(一点)你做这些检查的频率。如果你有很多很多很多的值要检查,那么我会使用哈希表并将整个列表缓存在内存中。

    字符串查找在任何情况下都会表现不佳。

    【讨论】:

    • 我会投票给哈希表。无论如何,sql表只是在做一个索引覆盖的查询,那么在功能上有什么区别呢?无论如何,这是一个深思熟虑的答案。
    【解决方案3】:

    我可能会误解你,但最快的方法是只检索计数本身:

    select count(*) 
    from MyTable 
    where code = 'x'
    

    【讨论】:

      【解决方案4】:

      如果您需要检查值是否存在,类Dictionary<TKey, TValue> 的方法Contains 返回结果比Hashtable 的相同方法更快。查看基准测试结果:http://dotnetperls.com/hashtable

      【讨论】: