4

SQL を使用して Windows デスクトップ検索 API を照会しようとしています。

Windows 7 の検索 GUI が大嫌いなので、独自の検索 GUI を作成することにしました。多くのファイルにインデックスが付けられており (約 1.000.000)、名前を検索したいと考えています。のようなもの: 「バニー」を含むすべての名前を表示します。

しかし、ここでパフォーマンスの問題に遭遇します。探している

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

は本当に速いです。また、%egon代替。しかし%egon%、永遠にかかります。それがインデックスの性質によるものなのか(可能性が非常に高まることを理解しています)、それとも何か間違ったことをしているのかはわかりません。

質問は:

  • Windows インデックスが単なる大きな SQL データベースであるというのは正しいですか?
  • その場合、DB の構造 (主キー、インデックス) に関する正確な情報はどこにありますか。

それがあれば、基本的には SQL を最適化するだけです。

別の質問:名前のどこかにegonを含むすべてのファイルを検索するための高速な SQL ステートメントを知っている人はいますか?

編集: 検索 GUI が気に入らない理由

XP と比較すると、直感的ではありません。犬を無効にして古い XP インターフェイスを使用すると、次のような検索クエリを作成できます。

  • 1 か月以上前のすべてのファイル
  • 10MB以上
  • 名前パターン*_homework_*.docx

構文を「学習」せずに、Windows 7 でこれを試してください。1 つのファイルを見つけるためだけに別の構文を学習したくありません。

他の主な問題は、おそらく私の検索の習慣です。ほとんどの場合、ファイル名 (またはその一部) はなんとなくわかっていて、単純に場所が知りたいだけです。この方法で検索を使用すると、いくつかの問題が発生します。

  • まず、常に名前の前に付ける必要があります。
  • 次に、フォルダー名のレイアウトがばかげています(フルパスではなく、親フォルダーによる順序になっていると思います..多田...次のポイントを参照してください)
  • 次に、さらに厄介なことに、結果のリストがあり、それらを並べ替えようとすると、永遠に時間がかかります

そして今、私のシステムにバグがあると本当に思っています。私はすぐにそれをチェックしようとし、平均的なサイズのフォルダーで「テスト」を検索し、いくつかのファイルを見つけました。次に、フォルダーを並べ替えようとしましたが (2 番目のポイントを確認するため)、彼は永遠に検索しているだけです... つまり、私が入力している間、彼は「こんにちは」という単語を見つけようとします... ああ、終了しました - 彼は約 20 個のファイルが見つかりました。では、何か試してみましょう.. わかりました、彼は回復したようです..

だから、検索についての十分な呪い:-)

4

3 に答える 3

4

名前にインデックスを作成しているように見えるため、文字列の先頭を指定している限りインデックスを使用できますが、指定していない場合は、テーブルスキャンを使用する必要があります。

Microsoftの全文検索エンジンを使用していると仮定して、次のようなものを使用してみてください
。... WHERE system.filename CONTAINS'egon'

基本的に2つの選択肢があります。無効として拒否されるか(つまり、このSQLインターフェースはFT検索拡張機能をサポートしていません)、そうでない場合はかなり高速になります。

EDIT:Oops-構文は「contains(system.filename、'egon')」である必要があります。申し訳ありませんが、それについて。

于 2009-10-09T02:28:09.263 に答える
4

多分試してみてください

"SELECT \"System.ItemPathDisplay\" FROM \"SystemIndex\" WHERE CONTAINS(System.FileName, 'egon')";
于 2009-10-09T02:29:40.593 に答える
0

インデックスを使用できないため、これは低速です。その理由は、文字列の先頭ではなく、文字列内のどこかで一致を検索しているためです。つまり、テーブル全体をスキャンして内容を確認する必要があります。

于 2009-10-09T02:27:33.017 に答える