Short answer
Open the Performance Advisor and the Query Performance report in the Supabase dashboard. They point at missing indexes and security policies that check every row. Then check that the app fetches only the rows and columns it shows, that the project region is near your users, that serverless code uses the shared pooler, and whether CPU is maxed out before paying for more compute.
Rather not fix it yourself? App Fix Ticket starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.
Why the app is slow, and the fix
01
The columns you filter on have no index
“Database queries that filter or join on these columns will be slower because there is no index to speed them up.” Supabase, Advisors
Without an index, the database reads every row of a table to find the ones a query asks for. That is fine with a few hundred rows and slow with a few hundred thousand. Supabase’s Performance Advisor flags foreign key columns that have no index, and the Index Advisor in the dashboard suggests indexes for your slow queries.
02
Security policies run a check on every row
“A security policy is running its check on every single row instead of once per query, which slows down your database as your tables grow.” Supabase, Advisors
Row level security policies that call a function such as auth.uid() can run that call for each row. Wrapping the call in a select makes it run once per query, and an index on the column the policy checks, such as user_id, helps too. Supabase says to wrap only calls whose result does not change from row to row, as auth.uid() does.
03
The app fetches everything and lets the policy filter it
“Do not rely on RLS for filtering but only for security.” Supabase, RLS Performance and Best Practices
A query with no filter asks for the whole table, and row level security then removes what the user can’t see. Add the filter to the query itself, ask only for the columns the screen shows, and load long lists a page at a time.
04
The project is far from your users
“Choose the location closest to your users for the best performance.” Supabase, Available regions
Each request travels to the region the project was created in. A project in Asia serving users in the US adds that distance to every query. Compare your project’s region with where your users are.
05
Serverless functions open too many connections
“Use it for serverless and edge functions, which open many short-lived connections.” Supabase, Connect to your database
Serverless and edge functions, such as ones on Vercel or Netlify, open many short-lived connections, and each can hold its own database connection. Supabase’s connection guide says to connect them through the shared pooler’s transaction mode connection string instead of directly, with prepared statements turned off in the database library.
06
The compute size is too small, or the queries are the problem
“assess whether your bottlenecks are hardware-constrained or software-constrained” Supabase, Compute and Disk
Upgrading compute helps when the database is short on CPU or memory, and does little for a query that is missing an index. Check the CPU usage chart in the Database report in the dashboard before you upgrade.
Checked against the vendor’s docs on : Supabase docs: Advisors; Supabase docs: Managing indexes in Postgres; Supabase docs: Query optimization; Supabase: RLS Performance and Best Practices; Supabase docs: Available regions; Supabase docs: Connect to your database; Supabase docs: Compute and Disk.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.See scope and start
“Very responsive, attentive to fixing bugs, and completed the project as needed! Thank you!”
Related: Supabase too many connections · Supabase new row violates row-level security · Supabase project paused · Firebase Hosting site not updating