SQL LIKE مع عدم وجود أحرف بدل مثل "="؟
سؤال
أعلم أن هذا سؤال أساسي جدًا، وأنا يفكر أعرف الإجابة...ولكن أريد التأكيد.
هل هذه الاستعلامات متكافئة حقًا؟
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 '
وأي محسن جيد من شأنه أن يقلل التعبير الأول إلى الثاني.