All Docs
FeaturesMaking Tax DigitalUpdated February 27, 2026

Performance Improvement: Quarterly Summary Database Index

Performance Improvement: Quarterly Summary Database Index (v1.0.184)

Overview

Version 1.0.184 introduces a targeted database optimisation that improves the speed of quarterly summary computations. A partial composite index has been added to the transactions table, directly accelerating the query path that powers your quarterly HMRC tax submissions.

Background

When you generate a quarterly summary, the platform queries the transactions table using a combination of three filters:

FilterPurpose
org_id = ?Scopes the query to your organisation's transactions only
excluded_at IS NULLIgnores transactions you have manually excluded
hmrc_category IS NOT NULLIncludes only transactions that have been assigned an HMRC category

This query runs frequently — every time a quarterly summary is loaded or refreshed — making it a performance-critical path.

What Was Added

A partial composite index on the transactions table:

CREATE INDEX idx_transactions_org_hmrc_category
  ON transactions (org_id, hmrc_category)
  WHERE excluded_at IS NULL;

Why a partial index?

A partial index only indexes rows that match the WHERE excluded_at IS NULL condition. This means:

  • The index is smaller and faster to scan than a full index on these columns
  • The database can resolve all three query conditions (org scope, exclusion filter, category filter) directly from the index without touching the main table rows
  • Write overhead for excluded transactions is eliminated, since they are not included in the index

User Impact

  • Faster quarterly summaries — load and refresh times for the quarterly tax summary view are reduced, particularly for landlords with a large number of historical transactions.
  • No action required — this is a server-side change. No configuration, re-authentication, or data migration is needed.
  • No breaking changes — all existing functionality, including HMRC submissions and AgentOS transaction imports, continues to work as before.