From 226bc20e3f02bd88e35c59da67026176ac8b77ec Mon Sep 17 00:00:00 2001 From: Aurora Lahtela <24460436+AuroraLS3@users.noreply.github.com> Date: Sun, 12 Feb 2023 10:37:52 +0200 Subject: [PATCH] Speed up /v1/network/servers by 66% Benchmark: endpoint (fetchPeakPlayerCount is the highest contributor) - Before: 10 seconds (1s * server count) - Before: 3 seconds (332ms * server count) --- .../storage/database/queries/objects/TPSQueries.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/TPSQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/TPSQueries.java index fd03467b2..ecd737399 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/TPSQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/TPSQueries.java @@ -216,14 +216,15 @@ public class TPSQueries { } public static Query>> fetchPeakPlayerCount(ServerUUID serverUUID, long afterDate) { - String subQuery = '(' + SELECT + "MAX(" + PLAYERS_ONLINE + ')' + FROM + TABLE_NAME + WHERE + SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID + + String subQuery = '(' + SELECT + DATE + ",MAX(" + PLAYERS_ONLINE + ") as " + PLAYERS_ONLINE + FROM + TABLE_NAME + + WHERE + SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID + AND + DATE + ">= ?)"; String sql = SELECT + - DATE + ',' + PLAYERS_ONLINE + - FROM + TABLE_NAME + + "t." + DATE + ',' + "t." + PLAYERS_ONLINE + + FROM + TABLE_NAME + " t" + + INNER_JOIN + subQuery + " max on t." + DATE + "=max." + DATE + AND + "t." + PLAYERS_ONLINE + "=max." + PLAYERS_ONLINE + WHERE + SERVER_ID + "=" + ServerTable.SELECT_SERVER_ID + - AND + DATE + ">= ?" + - AND + PLAYERS_ONLINE + "=" + subQuery + + AND + "t." + DATE + ">= ?" + ORDER_BY + DATE + " DESC LIMIT 1"; return new QueryStatement<>(sql) { @@ -248,7 +249,6 @@ public class TPSQueries { }; } - @Benchmark.Slow("1s") public static Query>> fetchAllTimePeakPlayerCount(ServerUUID serverUUID) { return fetchPeakPlayerCount(serverUUID, 0); }