Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在大量数据中加快搜索过程?_Vb.net_Sqlite_Search - Fatal编程技术网

Vb.net 在大量数据中加快搜索过程?

Vb.net 在大量数据中加快搜索过程?,vb.net,sqlite,search,Vb.net,Sqlite,Search,我有一个SQLite(v3)数据库,其示例表如下: 5列(“名字”、“姓氏”、“街道”、ZIPCode、“城市”) 超过1'100'000行 我正在寻找VB.NET中最快的方法在整个数据中查找输入的搜索字符串。输入的搜索字符串应与字段的完整内容匹配,或仅与字段的一部分匹配 到目前为止,我尝试将整个数据加载到数据表中(大约需要40秒)。然后,我尝试使用以下SQL命令进行搜索: dt.Select("FirstName LIKE '%" + SearchString + "%'") 在另一种方法中

我有一个SQLite(v3)数据库,其示例表如下:

5列(“名字”、“姓氏”、“街道”、ZIPCode、“城市”)
超过1'100'000行

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

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

dt.Select("FirstName LIKE '%" + SearchString + "%'")
在另一种方法中,我创建一个排序数据视图,并使用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秒钟的结果


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

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

这花了大约11秒来运行

如果我将所有值放在一个带有pike“|”分隔符的字符串中,然后运行

If StringToSearch.Contains(SearchString) then...
这花了大约20毫秒。即使是将所有字符串放入单个字符串的时间也只花了2秒钟,因此我每次都可以重新加载
StringToSearch
,并且仍然比SELECT更快。我甚至没有使用
StringBuilder
。但是,如果您可以保留变量“StringToSearch”,而不是每次都重新生成它,那么它会更快

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

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

<>最后,我尝试了正则表达式,但与<>代码>

一样,你真的需要在单词中间搜索吗?将能够执行前缀搜索。不要加载数据表中的所有值。如果您只需要其中的一部分,那么在数据库端执行查询。数据库/表是否已索引??我认为索引使90%的数据库引擎更快。[在这种情况下,就像@the_lotus所说的,使用DB引擎来完成工作]。@CL:是的。数据库本身由客户软件解决方案提供。我不能对数据库本身进行更改。@莲花:我需要搜索所有现有数据。
If dr("street").ToString.Contains(SearchString) Then