2010-05-18 84 views
1

我有一個從sql查詢中提取的值列表,以瞭解x提供的值是否存在於其中。sql vs hashtable.containskey vs string.contains

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") 

該列表將在數千個範圍內......最快的方式是什麼?

回答

-1

你不查詢1請求相同和2

Strng將

codestring.Equals( 'X')

什麼是最快的依賴。字符串循環:沒有

哈希表 - 是的,千已加載(即你沒有打數據庫)直接

否則數據庫。

+0

codestring.Equals('x')將始終返回false,因爲字符串是連接的代碼... – VSP 2010-05-18 12:24:38

+0

那麼,你會給出的sql與「where code ='x'」 - 它也會返回false。 – TomTom 2010-05-18 12:33:30

+0

「其中代碼='x'」查詢值表(多行,多個代碼,示例,代碼='a',代碼='b'等等)。執行codestring.Equals('x')將針對單個字符串(例如:'abcdefghijklmnopqrstuvwxyz')計算單個值('x')。他們完全不同。 – code4life 2010-05-18 14:21:06

2

只有SQL會阻止整個結果集從數據庫傳送到您的應用程序。在那一點上,它取決於(一點)你多久進行這些檢查。如果你有很多很多的值需要檢查,那麼我會使用散列表並將整個列表緩存在內存中。

在任何情況下,字符串查找都是一個糟糕的執行者。

+0

這只是我的情況,謝謝! – VSP 2010-05-18 12:25:03

+0

我會爲散列表投票。 sql表只是在做一個索引覆蓋的查詢,所以在功能上有什麼區別?無論如何,一個精心思考的答案。 – code4life 2010-05-18 14:22:55

0

我可能會誤解你,但最快的方法是隻獲取計數本身:快則類Dictionary<TKey, TValue>返回結果

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