ตรวจสอบข้อความทั้งสองนี้:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
ถ้าCONDITION 1
เป็นTRUE
จะCONDITION 2
ถูกตรวจสอบ?
ถ้าCONDITION 3
เป็นFALSE
จะCONDITION 4
ถูกตรวจสอบ?
สิ่งที่เกี่ยวกับเงื่อนไขWHERE
: เครื่องยนต์ SQL Server ปรับเงื่อนไขทั้งหมดในWHERE
ข้อ? โปรแกรมเมอร์ควรวางเงื่อนไขในลำดับที่ถูกต้องเพื่อให้แน่ใจว่าเครื่องมือเพิ่มประสิทธิภาพ SQL Server แก้ไขได้อย่างถูกต้องหรือไม่?
เพิ่ม:
ขอบคุณแจ็คสำหรับลิงก์แปลกใจจากรหัส t-sql:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
ไม่มีการเพิ่มหารด้วยข้อยกเว้นศูนย์ในกรณีนี้
สรุป:
ถ้า C ++ / C # / VB มีการลัดวงจรทำไม SQL Server ถึงไม่มี?
เพื่อตอบคำถามนี้อย่างแท้จริงลองมาดูกันว่าทั้งสองทำงานกับเงื่อนไขอย่างไร C ++ / C # / VB ทั้งหมดมีการลัดวงจรที่กำหนดไว้ในข้อกำหนดภาษาเพื่อเพิ่มความเร็วในการเรียกใช้โค้ด เหตุใดจึงต้องประเมินสภาพ N หรือเมื่อคนแรกเป็นจริงอยู่แล้วหรือ M และเงื่อนไขเมื่อคนแรกเป็นเท็จแล้ว
พวกเราในฐานะนักพัฒนาจะต้องระวังว่า SQL Server นั้นทำงานต่าง มันเป็นระบบตามต้นทุน เพื่อให้ได้แผนการดำเนินการที่ดีที่สุดสำหรับการสืบค้นของเราตัวประมวลผลแบบสอบถามจะต้องประเมินทุก ๆ ที่เงื่อนไขและกำหนดค่าใช้จ่าย ต้นทุนเหล่านี้จะได้รับการประเมินโดยรวมเพื่อสร้างขีด จำกัด ที่ต้องต่ำกว่าขีด จำกัด ที่กำหนดไว้ของ SQL Server สำหรับแผนที่ดี ถ้าต้นทุนต่ำกว่าขีด จำกัด ที่กำหนดไว้จะมีการใช้แผนถ้าไม่ทำกระบวนการทั้งหมดซ้ำอีกครั้งด้วยต้นทุนเงื่อนไขแบบต่างๆ ค่าใช้จ่ายที่นี่เป็นได้ทั้งการสแกนหรือการค้นหาหรือการรวมหรือการรวมแฮช ฯลฯ ... ด้วยเหตุนี้การลัดวงจรตามที่มีอยู่ใน C ++ / C # / VB เป็นไปไม่ได้ คุณอาจคิดว่าการบังคับให้ใช้ดัชนีในคอลัมน์นั้นนับว่าเป็นการลัดวงจร แต่ก็ไม่เป็นเช่นนั้น มันบังคับให้ใช้ดัชนีนั้นและทำให้รายการแผนการดำเนินการสั้นลง ระบบยังคงมีต้นทุนอยู่
ในฐานะนักพัฒนาคุณต้องระวังว่า SQL Server จะไม่ทำให้เกิดการลัดวงจรเหมือนที่ทำในภาษาการเขียนโปรแกรมอื่นและไม่มีอะไรที่คุณสามารถทำได้เพื่อบังคับให้มันทำ