ดังที่มาร์คชี้ให้เห็นคุณจะต้องเผชิญกับความยากลำบากในการค้นหาความแตกต่างของประสิทธิภาพ ฉันคิดว่าปัจจัยอื่น ๆ จะมีความสำคัญมากกว่า สำหรับฉันฉันมักจะใช้ COALESCE และส่วนใหญ่แล้วคุณหรือ Mark พูดถึง:
- COALESCE เป็นมาตรฐาน ANSI มันเป็นสิ่งที่ฉันกังวลน้อยกว่าถ้าฉันจะย้ายรหัสของฉัน สำหรับฉันเป็นการส่วนตัวนี้ไม่สำคัญเพราะฉันรู้ว่าพอร์ตดังกล่าวเกิดขึ้นไม่บ่อยนักนอกโลกห้องเรียนของ Celko แต่สำหรับบางคนนี่เป็นประโยชน์
- ตรงกันข้ามกับสิ่งที่คุณพูดเกี่ยวกับความสามารถในการอ่านฉันพบว่ามันยากที่จะอ่าน ISNULL โดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ที่มาจากภาษาอื่นหรือแพลตฟอร์มที่ ISNULL ส่งคืนบูลีน (ซึ่งไม่มีอยู่ใน SQL Server) ได้รับ COALESCE นั้นยากที่จะสะกด แต่อย่างน้อยมันก็ไม่ได้นำไปสู่ข้อสมมติฐานที่ไม่ถูกต้อง
- COALESCE มีความยืดหยุ่นมากขึ้นฉันสามารถพูด COALESCE (a, b, c, d) ในขณะที่ด้วย ISNULL ฉันต้องทำรังหลายอย่างเพื่อให้ได้สิ่งเดียวกัน
คุณควรแน่ใจว่าคุณทราบถึงวิธีการจัดการลำดับความสำคัญของชนิดข้อมูลโดยใช้ฟังก์ชันทั้งสองถ้าคุณใช้กับประเภท / เขตข้อมูลต่าง ๆ เป็นต้น
บันทึก
มีข้อยกเว้นอย่างหนึ่งคือ สิ่งเหล่านี้ได้รับการจัดการแตกต่างกันไปใน SQL Server เวอร์ชันปัจจุบัน:
SELECT COALESCE((SELECT some_aggregate_query),0);
SELECT ISNULL((SELECT some_aggregate_query),0);
COALESCE
ตัวแปรจริงจะดำเนินการsome_aggregate_query
สองครั้ง (ครั้งเพื่อตรวจสอบค่าและเมื่อจะกลับมาเมื่อไม่เป็นศูนย์) ในขณะที่ISNULL
จะดำเนินการแบบสอบถามย่อยครั้ง ฉันพูดถึงความแตกต่างอื่น ๆ ไม่กี่ที่นี่:
COALESCE
ได้รับการประเมินสองครั้ง