Windows桌面搜索 - SQL令人难以置信的慢'%search%'

时间:2009-10-09 02:16:15

标签: c# .net wds

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

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

但在这里我遇到了性能问题。正在搜索

SELECT "System.ItemPathDisplay" 
FROM "SystemIndex" 
WHERE System.FileName LIKE 'egon%'

非常快。也是%egon替代方案。但%egon%需要永远。我不确定它是否属于索引的性质(我理解可能性大大增加)或者我是否做错了。

问题是:

  • Windows索引只是一个很大的SQL数据库吗?
  • 如果是这样,我在哪里可以找到有关DB结构的确切信息(主键,索引)。

如果我有,那基本上只是优化SQL。

备选问题:是否有人知道快速SQL语句,以便在名称中的某处找到 egon 的所有文件。

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

嗯,与XP相比,它只是不直观。如果禁用狗并使用旧的XP界面,我可以创建一个搜索查询,如:

  
      
  • 所有超过1个月的文件
  •   
  • 大于10 MB
  •   
  • 名称模式*_homework_*.docx
  •   

在Windows 7中尝试此操作而不“学习”语法。而且,我做想要学习另一种语法只是为了找到一个文件。

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

  • 首先,您必须在名称前加上前缀:
  • 然后文件夹名称布局是愚蠢的(它是按父文件夹排序,而不是完整路径,我,因为.. tada ...见下一点)
  • 然后,更烦人的是,如果你有一个结果列表而你试图对它们进行排序,那就需要永远

现在我觉得我的系统有一个bug。我试图快速检查它,在一些平均大小的文件夹中搜索“test”,他找到了一些文件。然后我尝试对文件夹进行排序(以验证我的第二点),现在他只是永远搜索...我的意思是,在我打字的时候,他试图找到“你好”这个词......哦,完了 - 他发现大约20个文件。所以,现在,让我们尝试一下......好吧,现在好像他已经恢复了......但是,仍然,为了我的口味减慢......

所以,关于搜索的诅咒足够多了: - )

3 个答案:

答案 0 :(得分:4)

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

假设他们正在使用微软的全文搜索引擎,那么请尝试使用以下内容: ... WHERE system.filename包含'egon'

基本上有两种选择:它将被拒绝为无效(即此SQL接口不支持其F-T搜索扩展),否则它会更快。

编辑:糟糕 - 语法应为“contains(system.filename,'e​​gon')”。抱歉'回合那个。

答案 1 :(得分:4)

也许试试

"SELECT \"System.ItemPathDisplay\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName, 'egon')";

答案 2 :(得分:0)

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