ฉันรู้สึกว่ามันคุ้มค่าที่จะชี้ให้เห็นแม้ว่ามันจะถูกสัมผัสในความคิดเห็นว่าในสถานการณ์นี้:
SELECT 1 FROM my_table WHERE *indexed_condition* LIMIT 1
ดีกว่า:
SELECT * FROM my_table WHERE *indexed_condition* LIMIT 1
นี่เป็นเพราะแบบสอบถามแรกสามารถทำได้โดยดัชนีในขณะที่สองต้องค้นหาแถว (เว้นแต่คอลัมน์ของตารางทั้งหมดจะอยู่ในดัชนีที่ใช้)
การเพิ่มส่วนLIMIT
คำสั่งอนุญาตให้เอ็นจินหยุดหลังจากค้นหาแถวใด ๆ
แบบสอบถามแรกควรเปรียบเทียบได้กับ:
SELECT EXISTS(SELECT * FROM my_table WHERE *indexed_condition*)
ซึ่งส่งสัญญาณเดียวกันไปยังเครื่องยนต์ (1 / * ไม่สร้างความแตกต่างที่นี่) แต่ฉันยังคงเขียน 1 เพื่อเสริมสร้างนิสัยเมื่อใช้EXISTS
:
SELECT EXISTS(SELECT 1 FROM my_table WHERE *indexed_condition*)
การเพิ่มการEXISTS
ห่อหากคุณต้องการผลตอบแทนชัดเจนเมื่อไม่มีแถวที่ตรงกัน
...EXISTS( SELECT 1/0 FROM someothertable)
การทดสอบด้วย สำหรับ SQL Server & Oracle - ไม่ทำให้การใช้ *, 1 หรือ NULL ไม่แตกต่างกันเนื่องจาก EXISTS จะทดสอบเฉพาะบูลีนที่อิงกับ 1+ ของเกณฑ์ WHERE