6
วิธีตรวจสอบ EXISTS อย่างมีประสิทธิภาพในหลาย ๆ คอลัมน์?
นี่เป็นปัญหาที่ฉันคิดขึ้นมาเป็นระยะและยังไม่พบทางออกที่ดีสำหรับ เผื่อว่าโครงสร้างตารางต่อไปนี้ CREATE TABLE T ( A INT PRIMARY KEY, B CHAR(1000) NULL, C CHAR(1000) NULL ) และข้อกำหนดคือการพิจารณาว่าคอลัมน์ใดคอลัมน์หนึ่งที่มีค่าว่างBหรือCมีNULLค่าใด ๆ(และถ้าเป็นเช่นนั้น) นอกจากนี้สมมติว่าตารางมีแถวนับล้านแถว (และไม่มีสถิติคอลัมน์ที่สามารถมองได้เนื่องจากฉันสนใจวิธีแก้ปัญหาทั่วไปสำหรับคิวรีประเภทนี้) ฉันสามารถคิดถึงวิธีการไม่กี่ทางที่จะเข้าใกล้สิ่งนี้ แต่ทุกคนก็มีจุดอ่อน EXISTSงบสองแยก นี่จะมีข้อดีของการอนุญาตให้แบบสอบถามหยุดสแกนเร็วที่สุดเท่าที่NULLจะพบ แต่ถ้าในความเป็นจริงไม่มีทั้งคอลัมน์ทั้งNULLสองการสแกนแบบเต็มจะส่งผลให้ แบบสอบถามรวมครั้งเดียว SELECT MAX(CASE WHEN B IS NULL THEN 1 ELSE 0 END) AS B, MAX(CASE WHEN C IS NULL THEN 1 ELSE 0 END) …