vb.net - 加快大量数据的搜索过程?

标签 vb.net sqlite search

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

5列(“名字”,“姓氏”,“街道”,邮政编码,“城市”)
超过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秒钟才能得到结果。

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

最佳答案

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

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


运行大约需要11秒

如果我用长矛“ |”将所有值放入字符串中分离器然后运行

If StringToSearch.Contains(SearchString) then...


这大约需要20毫秒。甚至将所有字符串放入单个字符串的时间也只花了2秒钟,因此我每次都可以重新加载StringToSearch,但仍然比SELECT快。我什至没有使用StringBuilder。但是,如果您可以保留变量'StringToSearch',而不必每次都重建它,它将更快。

顺便说一句,遍历行并询问每个字段是否包含该值需要1.5秒:

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


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

关于vb.net - 加快大量数据的搜索过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25119644/

相关文章:

vb.net - 连接到数据库时正确声明 ConfigurationManager

string - Visual Basic 将文件加载到由制表符分隔的 string(,)

java - 将 SQLite 安装到 Eclipse 中以与 Java 一起使用

python - 为什么我不能在 sqlite3 中使用 WITH 语句?

elasticsearch - ElasticSearch聚合+在非数值字段5.3上排序

VB.NET For 循环函数作用域与 block 作用域

html - 如何允许在传递给 HTML 值属性的字符串中使用双引号和单引号?

android - 单击按钮插入

android - 搜索过滤器空异常

xml - 用于搜索具有包含特定字符串的任何属性的节点的 Xpath?