Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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
C# Windows桌面搜索-SQL难以置信的慢';%搜索%';_C#_.net_Wds - Fatal编程技术网

C# Windows桌面搜索-SQL难以置信的慢';%搜索%';

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%需要永远的时间

我正在尝试使用SQL查询windows桌面搜索API

我不得不说我真的很讨厌Windows7的搜索GUI,所以我决定自己写。我有很多索引文件(大约1.000.000),我想搜索名称。比如:给我看每个包含“兔子”的名字

但在这里我遇到了一个性能问题。寻找

SELECT "System.ItemPathDisplay" 
FROM "SystemIndex" 
WHERE System.FileName LIKE 'egon%'
它真的很快。还有
%egon
备选方案。但是,
%egon%
需要永远的时间。我不确定这是否属于指数的性质(我知道可能性大幅增加),或者我是否做错了什么

问题是:

  • windows索引只是一个大型SQL数据库,这是否正确
  • 如果是这样的话,我在哪里可以找到关于数据库结构的确切信息(主键、索引)
如果我有,它基本上只是优化SQL

另一个问题:是否有人知道一个快速SQL语句来查找名称中某个地方带有egon的所有文件

编辑:为什么我不喜欢搜索GUI

与XP相比,这并不直观。如果禁用狗并使用旧的XP界面,我可以创建如下搜索查询:

  • 所有早于1个月的文件
  • 大于10MB
  • 名称模式
    *\u作业*.docx
在Windows7中尝试此操作,不要“学习”语法。见鬼,我不想学习另一种语法,只是为了找到一个文件

另一个主要问题可能是我的搜索习惯。大多数时候,我不知怎么知道文件名(或部分),只是想知道位置。如果以这种方式使用搜索,您会遇到几个问题:

  • 首先,您必须始终使用名称作为前缀:
  • 然后文件夹名称布局很愚蠢(它是按父文件夹排序的,我认为不是完整路径,因为..tada…请参阅下一点)
  • 然后,更令人恼火的是,如果你有一个结果列表,并且你试图对它们进行排序,那就要花很长时间
现在我真的认为我的系统有一个bug。我试着快速检查它,在一些平均大小的文件夹中搜索“test”,他发现了一些文件。然后我试着对它们进行文件夹排序(以验证我的第二点),现在他只是一直在搜索。。。我是说真的,当我打字时,他试图找到“你好”这个词。。。哦,完成了-他找到了大约20个文件。所以,现在,让我们试试。。。。好的,现在看来他已经康复了。。但是,为了迎合我的口味,我还是放慢了脚步


所以,关于搜索的咒骂已经够多了:-)

这太慢了,因为您无法使用索引。原因是您正在搜索字符串中的匹配项,而不是在字符串的开头,这意味着您必须扫描整个表以查找内容

看起来他们在名称上建立索引,因此只要您指定了字符串的开头,它就可以使用索引,但如果您没有指定,则必须使用表扫描

假设他们使用的是微软的全文搜索引擎,那么试着使用如下内容:
... 其中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搜索界面?请参阅帖子中的编辑:-)简而言之:要减慢速度,文件夹排序“错误”