sql - أداء ما شابه '٪ Query٪' مقابل بحث النص الكامل CONTAINS



database performance (2)

بالنسبة لقاعدة بيانات نموذجية ، يمكن أن يكون البحث CONTAINS أسرع بكثير على افتراض أن فهرس البحث عن النص الكامل المناسب مبني على الحقل الذي يتم البحث فيه. لا يستخدم تقييم LIKE بشكل عام فهرسًا ، وبالتالي يجب أن يقرأ جميع البيانات.

لدي موقف أرغب فيه في البحث عن كلمة واحدة .

بالنسبة لهذا السيناريو ، أي استعلام سيكون جيدًا من وجهة نظر الأداء؟

Select Col1, Col2 from Table Where Col1 Like '%Search%'

أو

Select Col1, Col2 from Table Where Col1 CONTAINS(Col1,'Search')

؟


Answer #1

سيكون البحث عن نص كامل (باستخدام CONTAINS) أسرع / أكثر كفاءة من استخدام LIKE مع wildcarding. يتضمن البحث عن نص كامل (FTS) القدرة على تحديد فهارس النص الكامل ، والتي يمكن استخدامها مع FTS. دون لماذا لا يمكنك تحديد فهرس FTS إذا كنت تنوي استخدام الوظيفة ...

LIKE مع wildcarding على الجانب الأيسر (IE: LIKE '%Search' ) لا يمكن استخدام فهرس (على افتراض وجود واحد للعمود) ، مما يضمن فحص الجدول. لم أختبرها وأقارنها ، ولكن لدى regex نفس المشكلة. لتوضيح ذلك ، لا يمكن استخدام LIKE '%Search' و LIKE '%Search%' لاستخدام فهرس ؛ LIKE 'Search%' يمكنه استخدام فهرس.





sql-like