Det bästa sättet att ta reda på det är naturligtvis att testa. Svaret kan vara olika beroende på datasetets storlek, antalet olika meta-nycklar, deras fördelning (har alla entiteter värden för alla meta-nycklar? eller bara för ett fåtal av dem?), inställningarna för din databas server och möjligen många andra faktorer.
Om jag skulle gissa skulle jag säga att kostnaden för JOIN
operationer i alternativ 2 skulle vara mindre än kostnaden för GROUP BY
och aggregerade funktioner som behövs i alternativ 1 och 3.
Så jag förväntar mig att hitta alternativ 2 snabbare än 1 och 3.
För att mäta alternativ 4 måste du överväga fler faktorer eftersom applikationen kan finnas på en annan server så belastningen av de två (db och applikations)servrarna och antalet klienter som kommer att begära dessa resultat måste tas med i beräkningen .
Sidenote:du behöver GROUP BY e.ID
i alternativ 1 och 3.