Eksempelforespørgslen bruger fra et SQL-perspektiv en "korreleret underforespørgsel" inde i select-klausulen, og ofte er dette en meget ineffektiv måde at danne en forespørgsel på.
SELECT ParentTable.*, (SELECT MAX(ChildTable.NumberField)
FROM ChildTable
WHERE ChildTable.FK_Id = ParentTable.Id)
FROM ParentTable
Selvom det ved første øjekast kan se ud til at være mere komplekst og dermed mindre effektivt, er det generelt bedre for ydeevnen at undgå "korrelerede underforespørgsler" i en select-klausul og erstatte med en "afledt tabel" i stedet, som denne:
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
Bemærk, at en korreleret underforespørgsel med en select-klausul kan returnere NULL, og på grund af dette, hvis de erstattes med en afledt tabel, er den tilsvarende jointype en LEFT OUTER JOIN (eller blot LEFT JOIN), da dette også tillader et NULL-resultat. Men hvis du ikke har brug for NULLs til kolonnen, så brug den mere effektive INNER JOIN i stedet.
Undskyld på forhånd for ikke at kende Yii2-syntaksen, men det virker relevant at kende en effektiv alternativ tilgang, som kan hjælpe med at løse problemet.