Make sure you query only the columns you need
I found that using computed columns is very useful, even if it is not saved, especially in the MVVM model, where you get only the columns needed for this particular view. Until you put in logic that is less efficient in the computed code column, you should be fine. The bottom line for those calculated (non-persistent columns), as a rule, you need to look in any case, if you use this data.
When it comes to performance
For performance, you reduce your query to rows and computed columns. If you put an index in a computed column (if it is checked Checked and it is not allowed ), I would be careful because the execution mechanism may decide to use this index and damage performance by calculating these columns. In most cases, you simply get a name or description from connection tables, so I think this is normal.
Do not be rude by force
The only time it would be pointless to use a lot of calculated columns is used if you use one class of a view model that captures all the data in all columns, including calculated ones. In this case, your performance will degrade depending on the number of calculated columns and the number of rows in the database you selected.
Computed columns for ORM Works Great.
An object relational mapper, such as EntityFramework, allows you to query a subset of the columns in your query. This works especially well with LINQ to EntityFramework. With computed columns, you donโt need to clutter up your ORM class with mapped views for each type of model.
var data = from e in db.Employees select new NarrowEmployeeView { Id, Name };
Only Id and Name are requested.
var data = from e in db.Employees select new WiderEmployeeView { Id, Name, DepartmentName };
Assuming DepartmentName is a computed column, you then get your calculated result for the last query.
Profiler
If you use the profiler and filter sql queries, you can see that actually computed columns are ignored if they are not specified in the select statement.