The above can help with most virtual column questions. Not a end all be all, but a great place for direction without scouring the forum for long periods of time on virtual column questions and basic structure. Also there are many different use cases from handling your app data. The more of something the more expensive. less data in each cell more columns you can have. more data in each cell less rows.
using sheet functions can get tricky as there are times that Google will update permissions settings and can cause your query to throw an error crashing the app. (but will be faster, but require more work hours for “Not If But When” fixes.)
A little of both can be a healthy balance but depends on the app and your use case. No one size fits all scenarios. but sometimes how hard do you want future YOU to work?
Depending on your use case, if you are afraid of any impact of virtual columns on your app performance, and given that arrayformula stops calculating beyond a certain amount of rows (I have experienced this in the past), you may want to either use a bot or a script to update values. It works like a charm, provided you are not willing to update a too large amount of records.
To explain a little further, you can use a bot with:
Instead of using a VC, why not put the lookup formula in the Initial Value of the column that is going to hold it? Make sure that you set that column to have the Reset on Edit flag so that whenever that record is updated then the lookup is re-evaluated as well.
The difference? The lookup is only performed when the record is updated and synced, not when ANY changes to any other records are updated and synced.
Let’s say that we have Column Name [ShippingCode] and [ShippingStatus]
[ShippingStatus] has a lookup to gets the value from shipping data sheet
if the shipping data sheet updates daily, we need the shipping status to update automatically as well
This function we can made with arrayformula in spreadsheet or virtualcolumn in appsheet but the problem when we use virtual column is that we need its value in the database