Hey AppSheet Community!
I wanted to share a massive performance breakthrough I just had. If you have mysteriously long sync times and your Performance Analyzer points to “Compute virtual columns”, even when you think you don’t have any heavy virtual columns—this might save your app!
The Problem
I’m running an app with a MySQL backend containing around 40,000 rows across several tables (Contacts, Projects, Invoices, etc.). My sync time was lagging.
When I looked at the Performance Analyzer, it showed 7.5 seconds being spent on “Compute virtual columns” for my Contacts table. The weird part? I had already cleaned up all my heavy SELECT() expressions and removed unnecessary Related... reference lists. My table only had physical columns.
The Investigation & The “Aha!” Moment
I dug deeper into the Performance Analyzer and unchecked the “Standard view” box. That’s when the hidden culprit revealed itself:
[internal] GeoCodeAddressColumn
Here is what was happening: If you set a physical column to the Address type, AppSheet automatically creates a hidden internal virtual column to geocode that text into GPS coordinates via Google Maps. Because it acts like a virtual column, it triggers on EVERY sync. It was literally trying to re-evaluate 10,000+ addresses every time the app synced, even if the data hadn’t changed! This is a massive waste of computing power and sync time.
Gemini told me this ![]()
AVOID ADDRESS FIELDS in yuour app!
The Solution (The 0-Second Alternative)
I wanted the fast sync speed, but I still needed my technicians to be able to click an address and see it on a map. Here is how to get the best of both worlds:
Step 1: Kill the Geocoder Go to your Data > Columns and change your column type from Address to Text (or LongText). This instantly stops the background geocoding tax.
Step 2: Create a Map Action Go to Actions and create a new Action for your table:
-
Do this: App: Go to a website
-
Target:
CONCATENATE("https://www.google.com/maps/search/?api=1&query=", ENCODEURL([Your_Address_Column])) -
Appearance: Choose a map pin icon and set it to display “Inline” next to your address column.
The Results
By offloading the map routing directly to the native Google Maps URL and stopping AppSheet from calculating it internally, my sync time instantly dropped to 0.5 - 0.7 seconds! Plus, field technicians often prefer this anyway because it opens the address directly in their native Google Maps app for GPS navigation.
The best architecture is to have your backend/database trigger a webhook to geocode the address via API ONLY when it is created/edited, and store the result in a physical LatLong column. AppSheet reads physical LatLong instantly without recalculating!)
Hope this helps someone else speed up their heavy apps! Let me know if you’ve run into this internal geocoding trap before.


