New See exactly what you're overpaying AWS in under 60 seconds. Try the Calculator for free

DynamoDB Single-Table Design Cost: Does It Actually Save Money?

When single-table design actually saves money, when it costs more, and what matters more than either.
Updated August 17, 2026
20 min read
DynamoDB Single-Table Design Cost: Does It Actually Save Money?
In this article
Key takeaways
1
Single-table design can reduce read-request consumption when one Query replaces multiple separately rounded read operations.
2
GSI write amplification can outweigh those read savings when many writes affect multiple indexes.
3
Compare table design with larger workload-specific cost drivers, including capacity mode, request volume, item size, storage, and available AWS commitment discounts.

The short answer

DynamoDB single-table design cost can be lower when the design removes separately rounded-up read operations and uses sparse indexes, but it can be higher when more items enter or update global secondary indexes.

The outcome depends on access patterns, item and index-entry sizes, index projections, write behavior, traffic shape, table class, and applicable AWS discounts. Use the worked scenario below as an illustration, then price the design with your own production metrics before refactoring.

DynamoDB Single-Table Design Cost: Where It Saves

Single-table design stores all entity types in one DynamoDB table under generic partition and sort keys (PK, SK), co-locating related items so a single query can fetch them together. It produces measurable savings in exactly two areas: reduced read operations and shared provisioned capacity.

A potential DynamoDB single-table design cost advantage comes from logical item co-location under a shared partition-key value. A Query on PK = “USER#123” with SK begins_with = “ORDER#” can return the user record and matching orders in one response, with read consumption based on the total size of the returned items.

Without a single-table design, fetching the same data requires at least 2 API calls, one GetItem for the user, one Query on a separate orders table and each call has its own read cost.
Single-table
=
1 Query returning 11 KB = ceil(11 KB ÷ 4 KB) × 0.5 = 1.5 RRU
Multi-table
=
1 GetItem (1 KB = 0.5 RRU) + 1 Query (10 KB = 1.5 RRU) = 2 RRU
Single-table is marginally cheaper per fetch here 0.5 RRU because each API call rounds up independently. The advantage is small at two entity types and widens with three or more, where multi-table would need an additional rounded-up call per entity.

On provisioned tables, separate tables can require separate autoscaling settings and minimum-capacity choices, so compare their configured capacity and utilization rather than assuming consolidation creates a fixed saving. On-demand pricing does not charge a per-table capacity minimum.

Also read: DynamoDB Reserved Capacity: Pricing for Read & Write Throughput

Where Does Single-Table Design Increase Costs?

Single-table design introduces three cost-increasing factors that most guides fail to quantify.
Single-table
=
10M base writes + 30M GSI writes = 40M WRU × $0.625/M = $25.00/month
Multi-table
=
10M base writes + 10M GSI writes = 20M WRU × $0.625/M = $12.50/month
The DynamoDB GSI cost doubles in the single-table scenario purely from unnecessary write amplification.
Bar chart comparing monthly write costs for single-table DynamoDB with 3 overloaded GSIs at 25 dollars per month versus multi-table with entity-specific GSIs at 12.50 dollars per month, showing 12.50 dollar monthly amplification penalty

Denormalization Inflates Item Size and Cost

Generic key attributes and index keys add bytes to each affected item, but the added size depends on attribute names, values, and index projections. Measure serialized production item sizes before and after the model change.

Write consumption rounds each base-table item and affected index entry up to 1 KB, so an item already close to that boundary can require an additional write request unit after its stored size increases.

Scans Cost More on a Single Table

A Scan on a single table reads every item regardless of entity type. If you need only Order entities at 20% of the table, you still pay to scan 100% of the data. Assuming consistent reads and ignoring per-request rounding, a full Scan of 50 GB consumes approximately 6.55 million RRUs, while scanning 10 GB consumes approximately 1.31 million RRUs.

A separate Orders table can therefore reduce scanned data by about 80% in this example, but a Query or an appropriate secondary index is generally preferable to either full-table Scan.

Also read: DynamoDB Contributor Insights Pricing

What Is the Net Cost Impact?

Show your work
RRU (eventually consistent)
=
ceil(total KB ÷ 4 KB) × 0.5
WRU (with GSI fan-out)
=
base writes × (1 + GSIs each write propagates to)
Use your own numbers. Every figure in the table below is this formula applied to the stated assumptions — swap in your own numbers to get your own answer.
Assumptions:
  • 50 million composite user-and-orders fetches per month, eventually consistent; each fetch returns 11 KB
  • The single-table model uses one Query per fetch, while the multi-table model uses one GetItem plus one Query per fetch
  • 10 million writes per month, all base items and affected index entries are 1 KB or smaller
  • Three GSIs receive every single-table write while one entity-specific GSI receives every multi-table write
  • Prices use DynamoDB Standard on-demand rates in US East (N. Virginia), with AWS Free Tier benefits excluded
  • Storage is excluded from the request-cost comparison because index-entry sizes and projections are not specified
Cost Dimension Single-Table Multi-Table (3 tables) Difference Winner
Read operations 35M RRU ($4.38) 50M RRU ($6.25) −$1.87 Single-Table
Write operations (base) 10M WRU ($6.25) 10M WRU ($6.25) $0.00 Tie
GSI write propagation 30M WRU ($18.75) 10M WRU ($6.25) +$12.50 Multi-Table
Storage 27 GB ($6.75) 25 GB ($6.25) +$0.50 Multi-Table
Total monthly cost $36.13 $25.00 +$11.13 Multi-Table
What to notice
GSI write propagation is the only line item large enough to decide the outcome — it flips the total on its own.
The net range: single-table is anywhere from $3–5/month cheaper (sparse GSIs) to $10–15/month more expensive (overloaded GSIs) for a mid-scale workload. At enterprise scale (1 billion+ requests/month), multiply by 20x – roughly $200–300/month favoring multi-table in the overloaded scenario.
Evaluate with your own data
Already past the table-design decision?

See what reserved capacity could save on your DynamoDB bill

Which Cost Levers Actually Move the Bill?

Table design is a second-order lever. Ranked by dollar impact:

Capacity Mode Selection: On-Demand vs. Provisioned. On-demand bills the request units your application consumes, while provisioned mode bills the read and write capacity you configure per hour. For steady, predictable workloads, compare both modes using actual utilization, autoscaling settings, and expected demand variation.

Reserved Capacity (~54–77% off provisioned). After choosing provisioned mode, reserved capacity cuts the rate by roughly 54% (1-year) to 77% (3-year). See our DynamoDB Reserved Capacity pricing guide for the full break-even math.

Database Savings Plans (12–18% in either mode). Launched December 2025, these cover DynamoDB on-demand (up to 18%) and provisioned (up to 12%) under one hourly commitment the only discount lever for teams that can't leave on-demand.

See our Database Savings Plans guide for the comparison against reserved capacity.

Item Size Optimization (1–3x multiplier). Reads bills in 4 KB blocks, writes in 1 KB blocks, trimming attribute names, dropping unused attributes, and compressing large fields can pull items under the next billing threshold.

Eventually Consistent Reads (50% read reduction). 0.5 RRU per 4 KB versus 1.0 for strongly consistent, an immediate halving if your application tolerates it.

Should You Refactor to Single-Table?

Refactoring an existing multi-table deployment to single-table is expensive in engineering time and carries migration risk. For the impact quantified above ($3–5/month savings on a mid-scale workload), the return on that investment is rarely positive.
Entity types counted

how many do you actually fetch together in one API call?

Read-to-write ratio measured

pull this from CloudWatch, don't estimate

GSI design audited

sparse or overloaded across entity types?

Growth pattern checked

do entities scale together or independently?

Single-Table vs. Multi-Table: When Each Design Wins
Signal Single-Table Multi-Table
Entity types fetched together per API call 3 or more 1 or 2
Read-to-write ratio Above 10:1 Below 5:1
GSI strategy Sparse (entity-specific key attributes) Entity-specific GSIs, 1 per table
Team DynamoDB experience High (comfortable with overloaded keys) Low to medium
Independent entity scaling No (entities grow together) Yes (one entity 10x, others flat)
Per-entity config needed (PITR, encryption, table class) No Yes
Building new vs. refactoring existing New build Existing multi-table
Expected monthly cost vs. multi-table $3–5/month cheaper with sparse GSIs $10–15/month cheaper if single-table uses overloaded GSIs
How to use this table: count the signals in each column for your workload. A majority in one column justifies that design.

If the split is 4–4, default to multi-table and revisit after access patterns stabilize. In short: refactor only when building new, with stable access patterns, 3+ entity types fetched together, and a heavily read-skewed profile otherwise kept multi-table.

What Comes After Choosing a Table Design?

Once your table design is set, ongoing DynamoDB cost optimization shifts to the capacity layer: choosing between on-demand and provisioned capacity, right-sizing throughput, and identifying stable usage patterns.

Usage.ai continuously analyzes AWS usage across your cloud environment to identify commitment opportunities and optimize coverage as workloads evolve.

With Flex Insured Commitments, teams can get up to 54% savings on a 1-year DynamoDB reserved capacity commitment with none of the commitment risk.

We monitor consumed read and write capacity across your DynamoDB environment, identify stable usage baselines, and help manage qualifying commitments where the economics make sense.

If a commitment ever costs more than the equivalent On-Demand usage, our Cashback Protection covers the difference, helping organizations maximize savings while retaining the flexibility to adapt as infrastructure changes.

Our pricing is performance-based, so you pay only a percentage of the savings we deliver.

See how much you can save on DynamoDB with Usage.ai.

Frequently asked questions

Does DynamoDB single-table design save money on on-demand tables?

Minimal to zero savings from consolidation itself on-demand pricing is per request, not per table. The only on-demand savings come from reduced read operations when single-table eliminates multi-call fetch patterns.

How much does a DynamoDB table cost?

There's no fixed monthly fee. You pay for on-demand or provisioned capacity, storage ($0.25/GB-month Standard class), and optional features. An empty, idle on-demand table costs $0.00/month.

Can you mix single-table and multi-table design?

Yes. Many production architectures use single-table for tightly coupled entity groups (a user and their orders) and separate tables for independent types like analytics events capturing read co-location while keeping independent scaling and per-table configuration.

How does single-table design affect DynamoDB Streams cost?

A single table's stream captures changes to all entity types, so a consumer needing one type still pays to read the full stream ($0.02 per 100,000 reads) and filter the rest. Multi-table design produces entity-specific streams.

Share
Facebook
X
LinkedIn
Reddit
Cut cloud cost with automation
Latest from our blogs