Truy vấn ví dụ, từ góc độ SQL đang sử dụng "truy vấn con tương quan" bên trong mệnh đề select và thường thì đây là một cách tạo truy vấn rất kém hiệu quả.
SELECT ParentTable.*, (SELECT MAX(ChildTable.NumberField)
FROM ChildTable
WHERE ChildTable.FK_Id = ParentTable.Id)
FROM ParentTable
Mặc dù thoạt nhìn nó có vẻ phức tạp hơn và do đó kém hiệu quả hơn, nhưng nói chung tốt hơn cho hiệu suất là tránh "truy vấn con tương quan" trong mệnh đề chọn và thay thế bằng "bảng dẫn xuất" thay thế, như sau:
SELECT ParentTable.*,c.MxNum
FROM ParentTable
LEFT JOIN (
SELECT ChildTable.FK_Id, MAX(ChildTable.NumberField) as MxNum FROM ChildTable
GROUP BY ChildTable.FK_Id
) AS c ON c.FK_Id = ParentTable.Id
Lưu ý, một truy vấn con tương quan với mệnh đề select có thể trả về NULL và do đó, nếu thay thế chúng bằng một bảng dẫn xuất, loại kết nối tương đương là LEFT OUTER JOIN (hoặc đơn giản là LEFT JOIN) vì điều này cũng cho phép kết quả NULL. Tuy nhiên, nếu bạn không cần NULL cho cột, thì hãy sử dụng INNER JOIN hiệu quả hơn.
Xin lỗi trước vì không biết cú pháp Yii2, nhưng có vẻ phù hợp nếu biết một phương pháp thay thế hiệu quả có thể hỗ trợ giải quyết vấn đề.