Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การใช้ STRAIGHT_JOIN ใน MySQL


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 มิฉะนั้นอาจช้ากว่า