STRAIGHT_JOIN ทำงานเหมือน INNER JOIN แต่บังคับให้ MySQL join ตารางตามลำดับที่ระบุ (ตารางซ้ายก่อน ตารางขวาหลัง) ใช้เมื่อ Optimizer เลือก Plan ไม่ดี
สร้าง 2 ตารางและ FK:
mysql> CREATE TABLE ForeignTableDemo ( Id INT, Name VARCHAR(100), FK INT ); mysql> CREATE TABLE PrimaryTableDemo ( FK INT, Address VARCHAR(100), PRIMARY KEY(FK) ); mysql> ALTER TABLE ForeignTableDemo ADD CONSTRAINT FKConst FOREIGN KEY (FK) REFERENCES PrimaryTableDemo(FK);
เพิ่มข้อมูล:
-- PrimaryTableDemo: (1,'US'), (2,'UK'), (3,'Unknown') -- ForeignTableDemo: (1,'John',1), (2,'Bob',2)
ใช้ STRAIGHT_JOIN:
SELECT ForeignTableDemo.Id, ForeignTableDemo.Name, PrimaryTableDemo.Address FROM ForeignTableDemo STRAIGHT_JOIN PrimaryTableDemo ON ForeignTableDemo.FK = PrimaryTableDemo.FK;
ผลลัพธ์ (เฉพาะแถวที่ match):
+------+------+---------+ | Id | Name | Address | +------+------+---------+ | 1 | John | US | | 2 | Bob | UK | +------+------+---------+
คำเตือน: ใช้ STRAIGHT_JOIN เฉพาะเมื่อแน่ใจว่า Join Order ที่บังคับดีกว่า Optimizer มิฉะนั้นอาจช้ากว่า