Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách dùng STRAIGHT_JOIN trong MySQL

STRAIGHT_JOIN hoạt động giống INNER JOIN nhưng ép buộc MySQL đọc bảng bên trái trước bảng bên phải (ghi đè optimizer). Dùng khi optimizer chọn sai thứ tự join gây chậm.

Chuẩn bị: 2 bảng có khóa ngoại

CREATE TABLE ForeignTableDemo (Id INT, Name VARCHAR(100), FK INT);
CREATE TABLE PrimaryTableDemo (FK INT, Address VARCHAR(100), PRIMARY KEY(FK));
ALTER TABLE ForeignTableDemo ADD CONSTRAINT FKConst FOREIGN KEY (FK) REFERENCES PrimaryTableDemo(FK);

INSERT INTO PrimaryTableDemo VALUES(1,'US'), (2,'UK'), (3,'Unknown');
INSERT INTO ForeignTableDemo VALUES(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;

Kết quả (chỉ hàng khớp):

+------+------+---------+
| Id   | Name | Address |
+------+------+---------+
| 1    | John | US      |
| 2    | Bob  | UK      |
+------+------+---------+

Khi nào dùng?

  • Bảng trái nhỏ, bảng phải lớn, index trên cột join của bảng phải tốt -> optimizer có thể chọn sai (scan bảng lớn trước).
  • STRAIGHT_JOIN ép join theo thứ tự viết: bảng trái -> bảng phải.
  • Cẩn thận: lạm dụng có thể làm chậm hơn nếu đoán sai. Chỉ dùng sau khi EXPLAIN chứng minh optimizer sai.