COALESCE VS ليس أداء فارغًا عند التحقق من سلسلة فارغة

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

  •  30-09-2019
  •  | 
  •  

سؤال

بعض المقالات التي وجدتها على الإنترنت قارنت isnull مع coalesce ، لذلك أعتقد أن سؤالي مختلف قليلاً.

أنا أتساءل أيهما أفضل من حيث الأداء?

SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';

أو

SELECT * FROM mytable WHERE COALESCE(mycolumn,'') <> '';

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

تعديل:

أنا أستخدم Teradata.

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

المحلول

هذا الإصدار أكثر قابلية للسرقة ويسمح باستخدام فهرس (يحتمل)

SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';

يمكن تبسيطه إلى

SELECT * FROM mytable WHERE mycolumn <> '';

السبب في أنني أقول "قليلاً" و "يحتمل أن يكون" هو أن مسند غير المساواة قد يعني أنك تنتهي بفحص كامل على أي حال.

نصائح أخرى

قد تفكر أيضًا في استخدام ansi_null على الإعداد. سيؤدي ذلك إلى تصفية القيم الخالية ضمنيًا على عمود حيث تصدر وسيطة بحث. القيام بذلك يبسط استفسارك ، لست متأكدًا مما إذا كان يجعله أسرع. من الناحية المنطقية ، يجب أن يتم تقييم وسيطات الترشيح الأقل ، ولا يتم استخدام أي وظائف في جملة يجب أن تتيح انتقائية الفهرس الكاملة. كمثال ، يمكنك إعادة تشغيل استفسارك مثل هذا:

SET ANSI_NULLS ON;
SELECT * FROM mytable WHERE NOT mycolumn = '';

آمل أن يساعد هذا.

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