C# Windows桌面搜索-SQL难以置信的慢';%搜索%';
我正在尝试使用SQL查询windows桌面搜索API 我不得不说我真的很讨厌Windows7的搜索GUI,所以我决定自己写。我有很多索引文件(大约1.000.000),我想搜索名称。比如:给我看每个包含“兔子”的名字 但在这里我遇到了一个性能问题。寻找C# Windows桌面搜索-SQL难以置信的慢';%搜索%';,c#,.net,wds,C#,.net,Wds,我正在尝试使用SQL查询windows桌面搜索API 我不得不说我真的很讨厌Windows7的搜索GUI,所以我决定自己写。我有很多索引文件(大约1.000.000),我想搜索名称。比如:给我看每个包含“兔子”的名字 但在这里我遇到了一个性能问题。寻找 SELECT "System.ItemPathDisplay" FROM "SystemIndex" WHERE System.FileName LIKE 'egon%' 它真的很快。还有%egon备选方案。但是,%egon%需要永远的时间
SELECT "System.ItemPathDisplay"
FROM "SystemIndex"
WHERE System.FileName LIKE 'egon%'
它真的很快。还有%egon
备选方案。但是,%egon%
需要永远的时间。我不确定这是否属于指数的性质(我知道可能性大幅增加),或者我是否做错了什么
问题是:
- windows索引只是一个大型SQL数据库,这是否正确
- 如果是这样的话,我在哪里可以找到关于数据库结构的确切信息(主键、索引)李>
- 所有早于1个月的文件
- 大于10MB
- 名称模式
*\u作业*.docx
- 首先,您必须始终使用名称作为前缀:
- 然后文件夹名称布局很愚蠢(它是按父文件夹排序的,我认为不是完整路径,因为..tada…请参阅下一点)
- 然后,更令人恼火的是,如果你有一个结果列表,并且你试图对它们进行排序,那就要花很长时间
所以,关于搜索的咒骂已经够多了:-)这太慢了,因为您无法使用索引。原因是您正在搜索字符串中的匹配项,而不是在字符串的开头,这意味着您必须扫描整个表以查找内容 看起来他们在名称上建立索引,因此只要您指定了字符串的开头,它就可以使用索引,但如果您没有指定,则必须使用表扫描 假设他们使用的是微软的全文搜索引擎,那么试着使用如下内容:
... 其中system.filename包含“egon” 基本上有两种选择:它将被视为无效而拒绝(即,此SQL接口不支持其F-t搜索扩展),或者它将更快一些 编辑:Oops——语法应该是“contains(system.filename,'egon')”。很抱歉。也许可以试试
"SELECT \"System.ItemPathDisplay\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName, 'egon')";
我不知道是否适用于windows 7,但任何两边都有通配符的%search text%的SQL相关查询将无法使用索引。它将做一个完整的表格扫描。。。Slowww.quitious,你为什么不喜欢windows搜索界面?请参阅帖子中的编辑:-)简而言之:要减慢速度,文件夹排序“错误”