การเข้าใจการทดสอบความไม่เท่ากันใน T-SQL: การสำรวจ AND NOT
, !=
, และ <>
การทดสอบความไม่เท่ากันเป็นด้านสำคัญของการสอบถามฐานข้อมูล และ T-SQL มีหลายวิธีในการทำเช่นนี้ หากคุณเคยสงสัยว่าจะใช้ AND NOT (t.id = @id)
, AND t.id != @id
, หรือ AND t.id <> @id
ไหม คุณไม่ได้อยู่คนเดียว ในบล็อกโพสต์นี้เราจะไปลึกลงในวิธีการต่างๆ นี้, พูดคุยเกี่ยวกับผลกระทบด้านประสิทธิภาพ, และช่วยชี้แจงแนวทางปฏิบัติที่ดีที่สุดสำหรับการทดสอบความเท่ากันใน T-SQL
ตัวเลือกความไม่เท่ากันใน T-SQL
เมื่อสร้างคำสั่งใน T-SQL คุณอาจพบกับสามรูปแบบที่ใช้บ่อยของความไม่เท่ากัน:
-
การใช้
AND NOT
:AND NOT (t.id = @id)
-
การใช้
!=
:AND t.id != @id
-
การใช้
<>
:AND t.id <> @id
เมื่อมองในด้านแรก รูปแบบเหล่านี้อาจดูเหมือนสามารถใช้แทนกันได้ แต่ให้เรามาแยกวิเคราะห์ว่าพวกมันเปรียบเทียบกันอย่างไรและพูดคุยเกี่ยวกับความแตกต่างด้านประสิทธิภาพใด ๆ
แผนการดำเนินการ
เมื่อคุณวิเคราะห์แผนการดำเนินการสำหรับรูปแบบเหล่านี้ คุณจะพบว่าพวกมันทำให้เกิดผลลัพธ์เดียวกันโดยพื้นฐาน ตัวอย่างเช่น ให้พิจารณาคำสั่ง SQL ต่อไปนี้:
DECLARE @id VARCHAR(40)
SELECT @id = '172-32-1176'
SELECT * FROM authors
WHERE au_id <> @id
SELECT * FROM authors
WHERE au_id != @id
SELECT * FROM authors
WHERE NOT (au_id = @id)
ในแต่ละกรณี แผนการดำเนินการที่ผลิตจะเหมือนกัน นั่นหมายความว่าไม่ว่าคุณจะเลือกใช้ไวยากรณ์ใด ประสิทธิภาพจะค่อนข้างคล้ายกัน
ข้อพิจารณาเรื่องการสร้างดัชนี
แม้ว่าชุดผลลัพธ์และแผนการดำเนินการจะเหมือนกันในรูปแบบเหล่านี้ แต่ผลกระทบที่อาจเกิดขึ้นต่อการสร้างดัชนีก็เป็นสิ่งที่สำคัญที่จะต้องพิจารณา การใช้ทั้ง !=
และ <>
อาจขัดขวางการใช้งานดัชนี:
-
การใช้ดัชนี: การใช้
!=
หรือ<>
อาจทำให้โอกาสในการใช้ดัชนีมีประสิทธิภาพลดลง เครื่องยนต์ SQL Server อาจพบความยากลำบากในการเพิ่มประสิทธิภาพการดำเนินการเมื่อใช้ตัวดำเนินการเหล่านี้ -
การใช้
AND NOT
: เช่นเดียวกับ!=
และ<>
, คลาสAND NOT
ก็ประสบกับข้อจำกัดนี้เช่นกัน เนื่องจากการเปรียบเทียบที่อยู่เบื้องหลัง (t.id = @id
) ยังคงส่งผลให้เกิดเงื่อนไขที่ไม่สามารถสร้างดัชนีได้
ความคัดเกลาของดัชนี
สิ่งสำคัญคือต้องสังเกตว่า ประสิทธิภาพของดัชนีใด ๆ ก็ขึ้นอยู่กับความคัดเกลาของมัน ความคัดเกลาหมายถึงความเป็นเอกลักษณ์ของค่าที่จัดดัชนีในคอลัมน์:
- ความคัดเกลาสูง: หากค่าภายในคอลัมน์ดัชนีมีความเป็นเอกลักษณ์มาก การใช้
<>
หรือ!=
อาจทำให้ได้การสอบถามที่มีประสิทธิภาพ - ความคัดเกลาต่ำ: ในทางกลับกัน หากค่าต่าง ๆ ไม่แตกต่างกัน ตัวเลือกของตัวดำเนินการจะมีความสำคัญน้อยลง เนื่องจากเครื่องยนต์มักจะค้นหาตารางมากขึ้นอยู่ดี
แนวทางปฏิบัติที่ดีที่สุด
หลังจากพิจารณากลไกของตัวดำเนินการความไม่เท่ากันเหล่านี้แล้ว ต่อไปนี้คือแนวทางปฏิบัติที่ดีที่สุดบางประการ:
-
เลือกใช้
<>
: นักพัฒนา T-SQL หลายคนชอบใช้<>
เพื่อความชัดเจนและการปฏิบัติตามมาตรฐาน ทำให้สามารถรับรู้ได้ทันทีว่าเป็นตัวดำเนินการความไม่เท่ากัน -
หลีกเลี่ยง
!=
: ในขณะที่!=
ก็เป็นตัวดำเนินการที่ถูกต้อง แต่<>
เป็นมาตรฐาน ANSI SQL และมักได้รับความนิยมเนื่องจากความเข้ากันได้ข้ามฐานข้อมูล -
ใช้
AND NOT
อย่างระมัดระวัง: ใช้AND NOT
เมื่อการตัดสินใจต้องการ แต่ให้ระวังผลกระทบที่อาจเกิดขึ้นต่อดัชนี เช่นเดียวกับตัวดำเนินการอื่น ๆ
โดยสรุปในขณะที่วิธีการทดสอบความไม่เท่ากันใน T-SQL สามารถมีแผนการดำเนินการที่เหมือนกัน การเข้าใจผลกระทบของมันในด้านการสร้างดัชนีและความคัดเกลานั้นสำคัญต่อการเขียนคำสอบถามที่มีประสิทธิภาพ โดยการยึดมั่นในแนวทางปฏิบัติที่ดีที่สุดและตระหนักถึงวิธีที่โค้ดของคุณทำงานร่วมกับเครื่องยนต์ของ SQL Server คุณจะสามารถเพิ่มประสิทธิภาพของฐานข้อมูลของคุณได้ดียิ่งขึ้น