Примерната заявка, от гледна точка на SQL, използва „корелирана подзаявка“ в клаузата за избор и често това е много неефективен начин за формиране на заявка.
SELECT ParentTable.*, (SELECT MAX(ChildTable.NumberField)
FROM ChildTable
WHERE ChildTable.FK_Id = ParentTable.Id)
FROM ParentTable
Въпреки че на пръв поглед може да изглежда по-сложно и следователно по-малко ефективно, като цяло е по-добре за производителността да се избягват „корелирани подзаявки“ в клауза за избор и вместо това да се заменят с помощта на „производна таблица“, както следва:
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
Забележете, корелирана подзаявка с клауза за избор може да върне NULL и поради това, ако се заменят с извлечена таблица, еквивалентният тип на присъединяване е LEFT OUTER JOIN (или просто LEFT JOIN), тъй като това също позволява резултат NULL. Ако обаче не се нуждаете от NULL за колоната, използвайте вместо това по-ефективното INNER JOIN.
Предварително се извиняваме, че не знаете синтаксиса на Yii2, но изглежда уместно да знаете ефективен алтернативен подход, който може да помогне за решаването на проблема.