Better performance when working with multiple extensions

Important

This content is archived and is not being updated. For the latest documentation, go to What's new or changed in Business Central. For the latest release plans, go to Dynamics 365, Power Platform, and Cloud for Industry release plans.

Enabled for Public preview General availability
Admins, makers, marketers, or analysts, automatically Sep 8, 2023 Oct 2, 2023

Business value

Improving the data loading speed on the server benefits all usage scenarios, including web service integrations, background jobs, and interactive sessions.

Feature details

This release focuses on optimizing an essential part of the data stack in the Business Central server: The data model for table extensions.

In previous releases, when a developer extended a table, the fields from the table extension were stored in a separate table called a companion table in the database. This design was chosen to make the app lifecycle (install, update, uninstall) nondisruptive to normal usage of the base table. Unfortunately, it also had impact on the runtime performance on the system because the Business Central server needed to join data from table extensions when reading data from a table. As an example, for a table with 7 table extensions, the server might need to do a 7-way join.

In this release, we change the data model for table extensions so that added fields from all extensions to a table are now stored in the same companion table. In this new model, the server will never need to do more than a single join of the base table to its companion table. We expect this to drastically reduce the performance impact of table extensions to base tables, while still maintaining good stability of app lifecycle events. The cloud migration tool supports this new schema when migrating data from earlier versions to version 23.

Expected read performance by number of table extensions Expected read performance by number of table extensions.

Note that this change does not impact the table model as seen from the AL language, so no code changes are needed from extension/app publishers. An additional benefit of this new data model on the database is that developers can now organize code with table extensions the way they want to, without having to think about the performance impact of where table extensions are located in apps.