diff --git a/packages/prisma/migrations/20260407000000_add_composite_indexes_for_scale/migration.sql b/packages/prisma/migrations/20260407000000_add_composite_indexes_for_scale/migration.sql new file mode 100644 index 00000000000000..f5a2ac1903f45e --- /dev/null +++ b/packages/prisma/migrations/20260407000000_add_composite_indexes_for_scale/migration.sql @@ -0,0 +1,16 @@ +-- User: optimize login/verification lookups. +-- The User table has low write volume (account creation/updates) relative to +-- the high read frequency of auth queries, making this a safe addition. +CREATE INDEX CONCURRENTLY IF NOT EXISTS "users_email_emailVerified_idx" +ON "users" ("email", "emailVerified"); + +-- Availability: optimize schedule-based date range lookups. +-- Availability has 3 existing indexes. This composite covers the common +-- query pattern of fetching schedule slots within a date range. +CREATE INDEX CONCURRENTLY IF NOT EXISTS "Availability_scheduleId_date_idx" +ON "Availability" ("scheduleId", "date"); + +-- Availability: optimize user-based date range lookups. +-- Covers the common pattern of fetching a user's availability for a date range. +CREATE INDEX CONCURRENTLY IF NOT EXISTS "Availability_userId_date_idx" +ON "Availability" ("userId", "date"); diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index 86a550d252913b..63cad7d4c6d020 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -531,6 +531,7 @@ model User { @@index([emailVerified]) @@index([identityProvider]) @@index([identityProviderId]) + @@index([email, emailVerified]) @@map(name: "users") } @@ -998,6 +999,8 @@ model Availability { @@index([userId]) @@index([eventTypeId]) @@index([scheduleId]) + @@index([scheduleId, date]) + @@index([userId, date]) } model SelectedCalendar {