Question

Je suis en train d'interroger la recherche de bureau Windows API utilisant SQL.

Je dois dire que je déteste vraiment les fenêtres 7 GUI de recherche, et je décidé d'écrire mon propre. J'ai beaucoup de fichiers indexés (environ 1.000.000), et je veux faire une recherche de noms. Quelque chose comme: Montrez-moi tout nom qui contient « lapin »

.

Mais ici je rencontre un problème de performance. Recherche de

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

est vraiment rapide. Aussi l'alternative %egon. Mais %egon% prend une éternité. Je ne sais pas si elle est dans la nature de l'indice (je comprends que les possibilités augmentent énormément) ou si je fais quelque chose de mal.

La question est:

  • Est-il exact que l'indice Windows est seulement une grande base de données SQL?
  • Si oui, où puis-je trouver des informations précises sur la structure de la base de données (clés primaires, index).

Si j'ai que, fondamentalement juste son optimisation SQL.

Question alternative:. Est-ce que quelqu'un connaît une instruction SQL rapide pour trouver tous les fichiers avec egon quelque part dans le nom

Edit: Pourquoi je n'aime pas l'interface graphique de recherche

Eh bien, juste pas intuitive, par rapport à XP. Si vous désactivez le chien et utilisez l'ancienne interface XP, je pourrais créer une requête de recherche comme:

  
      
  • Tous les fichiers plus de 1 mois
  •   
  • plus de 10 Mo
  •   
  • modèle de nom *_homework_*.docx
  •   

Essayez ceci dans Windows 7 sans « apprendre » la syntaxe. Et l'enfer, je fais pas veulent apprendre une autre syntaxe juste pour trouver un fichier.

L'autre principal problème sont peut-être mes habitudes de recherche. La plupart du temps je sais en quelque sorte le nom du fichier (ou parties) et que vous voulez simplement l'emplacement. Et si vous utilisez la recherche de cette façon que vous avez exécuté en plusieurs problèmes:

  • Tout d'abord, vous avez toujours le préfixe avec le nom:
  • Ensuite, la mise en page du nom du dossier est stupide (il ordonne par dossier parent, pas le chemin complet, I pense , parce que .. Tada ... voir le point suivant)
  • Alors, encore plus ennuyeux, si vous avez une liste de résultats et vous essayez de les trier, il faut toujours

Et maintenant, je pense vraiment que mon système a un bug. J'ai essayé de vérifier rapidement, recherché dans un certain dossier de taille moyenne pour « test » et il a trouvé des fichiers. Alors j'ai essayé de les trier pour les dossiers (pour vérifier mon deuxième point) et maintenant il est juste pour toujours ... Je cherche veux dire vraiment, alors je tape qu'il essaie de trouver le mot « bonjour » ... oh, fini - il trouvé environ 20 fichiers. Donc, maintenant, permet d'essayer quelque chose .... Ok, il semble maintenant comme il l'a récupéré .. Mais encore, pour ralentir à mon goût ...

Alors, assez jurons au sujet de la recherche: -)

Était-ce utile?

La solution

On dirait qu'ils construisent un indice sur le nom, il peut donc utiliser l'index aussi longtemps que vous avez spécifié le début de la chaîne, mais si vous n'avez pas, il doit utiliser un scan de table.

En supposant qu'ils utilisent le moteur de recherche de texte intégral de Microsoft, essayez d'utiliser quelque chose comme:
... Où system.filename CONTIENT 'egon'

Il existe essentiellement deux choix: il sera rejeté comme non valide (à savoir l'interface SQL ne prend pas en charge leur extension de recherche F-T) ou bien ce sera un peu plus rapide

.

EDIT: Oops - la syntaxe doit être "contient (system.filename, 'egon')". Désolé pour cela.

Autres conseils

Peut-être essayer

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

Ceci est lent parce que vous ne pouvez pas utiliser un index. La raison est que vous êtes à la recherche d'un match anwhere dans la chaîne plutôt que au début de la chaîne qui signifie que vous devez numériser toute la table pour le contenu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top