หลังจากอ่านแบบสอบถาม SQL ช้าไม่แน่ใจว่าจะเพิ่มประสิทธิภาพมันทำให้ฉันคิดเกี่ยวกับประสิทธิภาพการทำงานทั่วไปของแบบสอบถาม แน่นอนว่าเราต้องการผลลัพธ์ของตารางแรก (เมื่อมีการรวมตารางอื่น ๆ ) ให้เล็กที่สุดเท่าที่จะเป็นไปได้ก่อนที่จะเข้าร่วม (Inner joins สำหรับคำถามนี้) เพื่อให้การสืบค้นของเราเร็วขึ้นเล็กน้อย
ตัวอย่างควร:
SELECT *
FROM ( SELECT * FROM table1 WHERE col = @val ) t
INNER JOIN table2 ON col = col2
จะดีกว่า / เร็วกว่า:
SELECT *
FROM table1
INNER JOIN table2 ON col = col2
WHERE table1.col = @val
ทฤษฎีของฉันมีดังต่อไปนี้ (นี่อาจไม่เป็นการใช้งานที่ถูกต้องฉันพยายามจดจำจากหนังสือ internals SQL Server 2008 ที่ฉันอ่าน (MSFT Press)):
- ตัวประมวลผลแบบสอบถามได้รับตารางด้านซ้ายก่อน (ตารางที่ 1)
- เข้าร่วมตารางที่สอง (ตารางที่ 2) และสร้างผลิตภัณฑ์คาร์ทีเซียนก่อนกรองแถวที่จำเป็น (ถ้ามี)
- จากนั้นดำเนินการตามคำสั่ง WHERE, GROUP BY, HAVING โดยใช้คำสั่ง SEELCT
ดังนั้นหากในคำสั่ง # 1 ด้านบนตารางมีขนาดเล็กกว่าเครื่องยนต์ SQL จะทำงานได้น้อยลงเมื่อสร้างผลิตภัณฑ์คาร์ทีเซียน จากนั้นเมื่อคุณไปถึงคำสั่ง where คุณจะมีชุดผลลัพธ์ที่ลดลงซึ่งจะกรองในหน่วยความจำ
ฉันอาจจะห่างไกลจากเครื่องหมายมันไม่จริง อย่างที่ฉันพูดมันเป็นทฤษฎี
ความคิดของคุณ?
หมายเหตุ : ฉันแค่คิดถึงคำถามนี้และยังไม่มีโอกาสทดสอบตนเองเลย
หมายเหตุ 2 : ติดแท็กเป็น SQL Server เนื่องจากฉันไม่รู้อะไรเลยเกี่ยวกับการใช้ MySql เป็นต้นโปรดตอบ / แสดงความคิดเห็นต่อไป