squiggle
squiggle copied to clipboard
Save (updateSquiggleSnippetModel) runs too many queries
29 queries for a request that has some exports, ~26-27 without exports.
Overall it takes ~0.9-1s.
Most of these look like auth checks, possibly can be optimized with caches.
Another thing we could do is move the GraphQL API route and database closer to each other, either by switching to Vercel Postgres or by moving the GraphQL backend to Digital Ocean.
https://discord.com/channels/1130609991993274510/1133551706370752582/1180573887277318257
prisma:query SELECT 1
prisma:query SELECT "public"."Session"."id", "public"."Session"."sessionToken", "public"."Session"."userId", "public"."Session"."expires" FROM "public"."Session" WHERE ("public"."Session"."sessionToken" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE "public"."User"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE ("public"."User"."id" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query SELECT "public"."Owner"."id", "public"."Owner"."slug" FROM "public"."Owner" WHERE "public"."Owner"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."Model"."id", "public"."Model"."slug", "public"."Model"."createdAt", "public"."Model"."updatedAt", "public"."Model"."ownerId", "public"."Model"."isPrivate", "public"."Model"."currentRevisionId" FROM "public"."Model" LEFT JOIN "public"."Owner" AS "j1" ON ("j1"."id") = ("public"."Model"."ownerId") LEFT JOIN "public"."User" AS "j2" ON ("j2"."ownerId") = ("j1"."id") LEFT JOIN "public"."Group" AS "j3" ON ("j3"."ownerId") = ("j1"."id") WHERE ("public"."Model"."slug" = $1 AND ("j1"."slug" = $2 AND (("j2"."email" = $3 AND ("j2"."id" IS NOT NULL)) OR (("j3"."id") IN (SELECT "t4"."groupId" FROM "public"."UserGroupMembership" AS "t4" LEFT JOIN "public"."User" AS "j5" ON ("j5"."id") = ("t4"."userId") WHERE ("j5"."email" = $4 AND ("j5"."id" IS NOT NULL) AND "t4"."groupId" IS NOT NULL)) AND ("j3"."id" IS NOT NULL))) AND ("j1"."id" IS NOT NULL))) LIMIT $5 OFFSET $6
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE ("public"."User"."email" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query BEGIN
prisma:query SELECT "public"."User"."id" FROM "public"."User" WHERE ("public"."User"."id" = $1 AND 1=1) OFFSET $2
prisma:query SELECT "public"."Model"."id" FROM "public"."Model" WHERE ("public"."Model"."id" = $1 AND 1=1) OFFSET $2
prisma:query INSERT INTO "public"."SquiggleSnippet" ("id","code","version") VALUES ($1,$2,$3) RETURNING "public"."SquiggleSnippet"."id"
prisma:query INSERT INTO "public"."ModelRevision" ("id","createdAt","modelId","authorId","comment","contentType","contentId") VALUES ($1,$2,$3,$4,$5,CAST($6::text AS "public"."ModelType"),$7) RETURNING "public"."ModelRevision"."id"
prisma:query SELECT "public"."ModelRevision"."id", "public"."ModelRevision"."createdAt", "public"."ModelRevision"."modelId", "public"."ModelRevision"."authorId", "public"."ModelRevision"."comment", "public"."ModelRevision"."contentType"::text, "public"."ModelRevision"."contentId" FROM "public"."ModelRevision" WHERE "public"."ModelRevision"."id" = $1 LIMIT $2 OFFSET $3
prisma:query SELECT "public"."Model"."id" FROM "public"."Model" WHERE "public"."Model"."id" IN ($1) OFFSET $2
prisma:query UPDATE "public"."Model" SET "currentRevisionId" = $1, "updatedAt" = $2 WHERE ("public"."Model"."id" = $3 AND 1=1) RETURNING "public"."Model"."id", "public"."Model"."slug", "public"."Model"."createdAt", "public"."Model"."updatedAt", "public"."Model"."ownerId", "public"."Model"."isPrivate", "public"."Model"."currentRevisionId"
prisma:query COMMIT
prisma:query SELECT 1
prisma:query SELECT COUNT(*) FROM (SELECT "public"."Owner"."id" FROM "public"."Owner" LEFT JOIN "public"."User" AS "j1" ON ("j1"."ownerId") = ("public"."Owner"."id") LEFT JOIN "public"."Group" AS "j2" ON ("j2"."ownerId") = ("public"."Owner"."id") WHERE ("public"."Owner"."id" = $1 AND (("j1"."email" = $2 AND ("j1"."id" IS NOT NULL)) OR (("j2"."id") IN (SELECT "t3"."groupId" FROM "public"."UserGroupMembership" AS "t3" LEFT JOIN "public"."User" AS "j4" ON ("j4"."id") = ("t3"."userId") WHERE ("j4"."email" = $3 AND ("j4"."id" IS NOT NULL) AND "t3"."groupId" IS NOT NULL)) AND ("j2"."id" IS NOT NULL)))) OFFSET $4) AS "sub"
prisma:query SELECT "public"."Model"."id", "public"."Model"."slug", "public"."Model"."createdAt", "public"."Model"."updatedAt", "public"."Model"."ownerId", "public"."Model"."isPrivate", "public"."Model"."currentRevisionId" FROM "public"."Model" WHERE ("public"."Model"."id" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query SELECT "public"."Owner"."id", "public"."Owner"."slug" FROM "public"."Owner" WHERE "public"."Owner"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE "public"."User"."ownerId" IN ($1) OFFSET $2
prisma:query SELECT "public"."Group"."id", "public"."Group"."createdAt", "public"."Group"."updatedAt", "public"."Group"."ownerId", "public"."Group"."reusableInviteToken" FROM "public"."Group" WHERE "public"."Group"."ownerId" IN ($1) OFFSET $2
prisma:query SELECT "public"."ModelRevision"."id", "public"."ModelRevision"."createdAt", "public"."ModelRevision"."modelId", "public"."ModelRevision"."authorId", "public"."ModelRevision"."comment", "public"."ModelRevision"."contentType"::text, "public"."ModelRevision"."contentId" FROM "public"."ModelRevision" WHERE "public"."ModelRevision"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."SquiggleSnippet"."id", "public"."SquiggleSnippet"."code", "public"."SquiggleSnippet"."version" FROM "public"."SquiggleSnippet" WHERE "public"."SquiggleSnippet"."id" IN ($1) OFFSET $2
prisma:query SELECT "public"."ModelExport"."id", "public"."ModelExport"."modelRevisionId", "public"."ModelExport"."variableName", "public"."ModelExport"."title", "public"."ModelExport"."docstring", "public"."ModelExport"."variableType" FROM "public"."ModelExport" WHERE "public"."ModelExport"."modelRevisionId" IN ($1) OFFSET $2
prisma:query SELECT "public"."RelativeValuesExport"."id", "public"."RelativeValuesExport"."modelRevisionId", "public"."RelativeValuesExport"."definitionId", "public"."RelativeValuesExport"."variableName" FROM "public"."RelativeValuesExport" WHERE "public"."RelativeValuesExport"."modelRevisionId" IN ($1) OFFSET $2
prisma:query SELECT "public"."User"."id", "public"."User"."name", "public"."User"."email", "public"."User"."emailVerified", "public"."User"."image", "public"."User"."ownerId" FROM "public"."User" WHERE ("public"."User"."id" = $1 AND 1=1) LIMIT $2 OFFSET $3
prisma:query SELECT "public"."Owner"."id", "public"."Owner"."slug" FROM "public"."Owner" WHERE "public"."Owner"."id" IN ($1) OFFSET $2
29 queries for a request that has some exports, ~26-27 without exports.
Now it's 42...