加快大量数据的搜索过程?

时间:2014-08-04 13:18:45

标签: vb.net sqlite search

我有一个带有以下示例表的SQLite(v3)数据库:

5列(" FirstName"," LastName"," Street",ZIPCode," City")
超过1' 100' 000行

我正在寻找VB.NET中最快的方法来查找整个数据中输入的搜索字符串。此输入的搜索字符串应与字段的完整内容匹配,或仅与其中的一部分匹配。

到目前为止,我尝试将整个数据加载到数据表中(大约需要40秒)。然后我尝试使用此SQL命令进行搜索:

dt.Select("FirstName LIKE '%" + SearchString + "%'")

在我的另一种方法中,我创建一个已排序的DataView并使用RowFilter命令进行搜索:

dvSORTED.RowFilter = "FirstName LIKE '%" & SearchString & "%'"

第一种方法在1,1秒内返回少量结果(~100),第二种方法需要1.5秒。

对于单个列中的搜索,这是正确的。对于每个附加列,搜索时间将乘以上述时间。所有列中的搜索大约需要8秒(5 x 1,5)。

小比较:如果我直接在SQLiteSpy中执行此SQL命令

SELECT FirstName, LastName, Street, ZIPCode, City FROM Addresses WHERE FirstName LIKE "%Peter%" or LastName LIKE "%Peter%" or Street LIKE "%Peter%" or City LIKE "%Peter%"

然后我必须等待大约10秒才能得到结果。

如何加快所有可用数据的搜索过程?

1 个答案:

答案 0 :(得分:1)

尝试将您需要搜索的所有字符串放在一个字符串中,并询问它是否contains您要查找的值。以下是我的测试结果,有170万条记录(相当独特):

If DT.Select("street like '%" & SearchString& "%'").Count > 0 Then 

这需要大约11秒才能运行

如果我把所有的值都放入一个带有长矛的字符串" |"分隔符,然后运行

If StringToSearch.Contains(SearchString) then...

这花了大约20ms。即使将所有字符串放入单个字符串的时间也只花了2秒,所以我每次都可以重新加载StringToSearch并且仍然比SELECT更快。我甚至没有使用StringBuilder。但是,如果你能保持变量' StringToSearch'周围,​​而不是每次都重建它,它会更快。

BTW,遍历行并询问每个字段是否包含该值需要1.5秒:

If dr("street").ToString.Contains(SearchString) Then

最后,我确实尝试过Regex,但与Contains同时进行。