Mark'ın işaret ettiği gibi, performans farklarını bulmak için çok zorlanacaksınız; Diğer faktörlerin daha önemli olacağını düşünüyorum. Benim için her zaman COALESCE kullanıyorum ve bunun çoğu zaten sizin tarafınızdan veya Mark tarafından belirtildi:
- COALESCE ANSI standardıdır. Kodumu taşıyacaksam endişelenmem gereken bir şey daha var. Şahsen benim için bu o kadar önemli değil, çünkü bu tür limanların ne kadar sıklıkla Celko'nun sınıf dünyasının dışında gerçekleştiğini biliyorum, ancak bazı insanlara bunun bir faydası var.
- Okunabilirlik hakkında söylediklerinizin aksine, özellikle ISNULL'un bir boole döndürdüğü (SQL Server'da bulunmayan) diğer dillerden veya platformlardan gelen kullanıcılar için ISNULL'u okumak daha zor olabilir . Verilmiş, COALESCE'in hecelenmesi daha zor, ancak en azından yanlış varsayımlara yol açmıyor.
- COALESCE, COALESCE (a, b, c, d) diyebileceğimden çok daha esnektir, oysa ISNULL ile aynı şeyi elde etmek için çok fazla yuva yapmak zorunda kalacağım.
Veri türü önceliğinin farklı işlevler / veriler vb. İle kullanıyorsanız, iki işlev kullanılarak nasıl işlendiğini bildiğinizden de emin olmalısınız.
Not
Bir istisna var. Bunlar, SQL Server'ın mevcut sürümlerinde farklı şekilde ele alınır:
SELECT COALESCE((SELECT some_aggregate_query),0);
SELECT ISNULL((SELECT some_aggregate_query),0);
COALESCE
Varyant çalıştırılacak olan asıl some_aggregate_query
(değerini kontrol etmek kez ve sıfır olmayan zaman bir kez dönmek için) iki kez, süre ISNULL
sadece bir kez alt sorgu çalıştırır. Burada birkaç başka farklılıktan söz ediyorum:
COALESCE
iki kez değerlendirilen