Tulee hidas siksi että tiimit lisätään ennen summausta. Lisäksi jos nykyisellä tiimillä enddate on null niin tuolla yllä olevalla saat kaikki muut paitsi nykyisen.Lisäsin tuohon vielä jokaiselle riville pelaajan nykyisen tiimin nimen. Hakuaikaa tuli yli tuplat lisää. Meniköhän joku väärin? Ilman tiimiä hakuaika on 0,5s ja tiimin kanssa 1,3s.
Tässä ratkaisuni:
Mulla on siis PlayerTeam-niminen taulukko, jossa on viittauksen kaikkiin pelaajien aikaisempiin tiimeihin ja nykyinen tiimi on se rivi, jossa endDate on NULL. Tässä on sellainen ongelma, että nyt käsittääkseni jokaisen pelaajan tilastot jakautuu joukkueiden mukaan, mutta tämä ei ole haluttua. Haluaisin tehdä niin, GROUP BY:ssä lasketaan kaikki tilastot tiettyjen pelien osalta yhteen ja vasta sen jälkeen lisätään hakutulokseen muu "metadata", kuten esimerkiksi juuri tuo tiimi ja kaikki muu Player-taulukosta löytyvä data.SQL:SELECT "Player"."id", "Team"."name", SUM("Stats"."goals") AS "goals", SUM("Stats"."assists") AS "assists" FROM "Player" INNER JOIN ( SELECT "GameStats"."playerId" AS "playerId", "GameStats"."goals" AS "goals", "GameStats"."assists" AS "assists", ROW_NUMBER() OVER (PARTITION BY "GameStats"."playerId" ORDER BY "Game"."gameDate" DESC) AS "seqnum" FROM "Game" JOIN "GameStats" ON ( "Game"."id" = "GameStats"."gameId" ) ) "Stats" ON ( "Player"."id" = "Stats"."playerId" ) JOIN "PlayerTeam" ON "Player"."id" = "PlayerTeam"."playerId" JOIN "Team" ON "PlayerTeam"."teamId" = "Team"."id" WHERE "Stats"."seqnum" < 6 AND "PlayerTeam"."endDate" IS NOT NULL GROUP BY "Player"."id", "Team"."name"
Eli jos ymmärsin oikein niin enddate is null olisi oikea ehto, silloin joinin ei pitäisi lisätä rivimäärää olettaen että voi kuulua kerrallaan vain yhteen tiimiin.
Saattaa toimia silti paremmin niin että pidät alkuperäisen kyselyn ennallaan (summat pelaajittain) ja liität sen kylkeen muut tiedot jolloin ruvejä on enää 1 per pelaaja.
Jos rivejä on paljon niin join ja ehtosarakkeille kannattaa tehdä indeksit.
Samoin jos sisäkkäisiä kyselyjä tulee paljon niin näkymät auttavat, ei tehossa mutta selkeyttää.