Windows Desktop Search - SQL بطيء بشكل لا يصدق '%search%'

StackOverflow https://stackoverflow.com/questions/1541511

  •  20-09-2019
  •  | 
  •  

سؤال

أحاول الاستعلام عن واجهة برمجة تطبيقات بحث سطح مكتب Windows باستخدام SQL.

يجب أن أقول إنني أكره حقًا واجهة المستخدم الرسومية للبحث في نظام التشغيل Windows 7، ولذا قررت أن أكتب واجهة المستخدم الخاصة بي.لدي الكثير من الملفات المفهرسة (حوالي 1.000.000)، وأريد إجراء بحث عن الأسماء.شيء مثل:أرني كل اسم يحتوي على "الأرنب".

ولكن هنا واجهت مشكلة في الأداء.البحث عن

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

سريع حقًا.أيضا %egon بديل.لكن %egon% يأخذ إلى الأبد.لست متأكدًا مما إذا كان ذلك من طبيعة المؤشر (أفهم أن الاحتمالات تتزايد بشكل كبير) أو إذا كنت أفعل شيئًا خاطئًا.

السؤال هو:

  • هل صحيح أن فهرس windows ليس سوى قاعدة بيانات SQL كبيرة؟
  • إذا كان الأمر كذلك، أين يمكنني العثور على معلومات دقيقة حول بنية قاعدة البيانات (المفاتيح الأساسية والفهارس).

إذا كان لدي ذلك، فهو في الأساس مجرد تحسين SQL.

سؤال بديل: هل يعرف أي شخص عبارة SQL سريعة للعثور على كافة الملفات بها egon في مكان ما في الاسم.

يحرر:لماذا لا أحب واجهة المستخدم الرسومية للبحث

حسنًا، إنه ليس بديهيًا، مقارنةً بـ XP.إذا قمت بتعطيل الكلب واستخدمت واجهة XP القديمة، فيمكنني إنشاء استعلام بحث مثل:

  • جميع الملفات أقدم من شهر واحد
  • أكبر من 10 ميغابايت
  • نمط الاسم *_homework_*.docx

جرب هذا في نظام التشغيل Windows 7 دون "تعلم" بناء الجملة.والجحيم، أفعل لا تريد أن تتعلم بناء جملة آخر فقط للعثور على ملف واحد.

ربما تكون المشكلة الرئيسية الأخرى هي عادات البحث الخاصة بي.في معظم الأوقات أعرف بطريقة ما اسم الملف (أو الأجزاء) وأريد الموقع ببساطة.وإذا استخدمت البحث بهذه الطريقة واجهت عدة مشاكل:

  • بادئ ذي بدء، عليك دائمًا أن تسبقه بالاسم:
  • إذن فإن تخطيط اسم المجلد غبي (يتم ترتيبه حسب المجلد الأصلي، وليس المسار الكامل، I يفكر, ، لأن..تادا...انظر النقطة التالية)
  • والأكثر إزعاجًا هو أنه إذا كانت لديك قائمة بالنتائج وحاولت فرزها، فسيستغرق الأمر وقتًا طويلاً

والآن أعتقد حقًا أن نظامي به خطأ.حاولت التحقق منه بسرعة، وبحثت في مجلد متوسط ​​الحجم عن "اختبار" ووجد بعض الملفات.ثم حاولت فرزها حسب المجلدات (للتحقق من نقطتي الثانية) وهو الآن يبحث إلى الأبد ...أعني حقًا أنه أثناء كتابتي يحاول العثور على كلمة "مرحبًا"...أوه، انتهى - لقد وجد حوالي 20 ملفًا.لذا، الآن، دعونا نجرب شيئًا ما....حسنًا، الآن يبدو أنه قد تعافى..ولكن لا يزال، لإبطاء ذوقي...

لذلك، كفى شتماً حول البحث :-)

هل كانت مفيدة؟

المحلول

يبدو أنهم يقومون بإنشاء فهرس على الاسم، لذا يمكنه استخدام الفهرس طالما حددت بداية السلسلة، ولكن إذا لم تقم بذلك، فيجب استخدام فحص الجدول.

بافتراض أنهم يستخدمون محرك البحث عن النص الكامل من Microsoft، فحاول استخدام شيء مثل:
...حيث يحتوي system.filename على "egon"

هناك في الأساس خياران:سيتم رفضه باعتباره غير صالح (أيلا تدعم واجهة SQL هذه امتداد البحث FT الخاص بها) وإلا فسيكون أسرع قليلاً.

تحرير: عفوًا - يجب أن يكون بناء الجملة "يحتوي على (system.filename، 'egon')".آسف بشأن ذلك.

نصائح أخرى

ربما حاول

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

هذا بطيء لأنك غير قادر على استخدام الفهرس.والسبب هو أنك تبحث عن تطابق في أي مكان في السلسلة وليس في بداية السلسلة مما يعني أنه يجب عليك فحص الجدول بأكمله بحثًا عن المحتويات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top