سؤال

أعلم أن هذا سؤال أساسي جدًا، وأنا يفكر أعرف الإجابة...ولكن أريد التأكيد.

هل هذه الاستعلامات متكافئة حقًا؟

SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'

ربما يكون هناك عبء على الأداء في استخدام الإعجاب بدون بطاقات البدل؟

لدي تطبيق يستخدم اختياريًا LIKE & Wild Cards.يقوم مقدم الخدمة حاليًا بما يلي ويقوم بإلحاق أحرف البدل - أفكر فقط في تحديث الاستعلام لاستخدامه مثل ولكن اطلب من التطبيق إلحاق أحرف البدل حسب الحاجة.

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

المحلول

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

نصائح أخرى

الإجابة الأصلية بواسطة مات ويتفيلد من هنا

هناك فرق بين = و LIKE.عند إجراء مقارنات السلسلة باستخدام LIKE, ، جميع الأحرف الموجودة في سلسلة النمط مهمة.يتضمن ذلك المسافات البادئة أو الزائدة.

لذلك إذا كان لديك عمود char أو nchar و لا nvarchar أو varchar, ، ستكون هناك نتائج مختلفة بسبب المسافات الزائدة.

مثال صغير لإعادة إنتاج هذا السلوك:

CREATE TABLE #temp (nam [varchar](MAX))
INSERT INTO [#temp] ([nam])
VALUES ('hello')
INSERT INTO [#temp] ([nam])
VALUES ('hello  ')

SELECT * FROM #temp WHERE [nam] = 'hello  '

SELECT * FROM #temp WHERE [nam] LIKE 'hello  '

وأي محسن جيد من شأنه أن يقلل التعبير الأول إلى الثاني.

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