← Back
Performance

WooCommerce HPOS Migration: Step-by-Step Guide for Store Owners

High-Performance Order Storage (HPOS) is the most impactful database improvement WooCommerce has shipped in years. Orders move from the overcrowded wp_posts and wp_postmeta tables into dedicated, indexed order tables — and the performance difference is dramatic. Here’s how to migrate safely.

Why HPOS Matters

Legacy WooCommerce stores every piece of order data — customer name, line items, shipping address, payment method, custom meta — in the generic WordPress post meta table. As your store grows, this table becomes enormous and queries slow down.

HPOS introduces dedicated tables: wc_orders, wc_order_items, wc_order_addresses, and wc_order_operational_data. These tables are purpose-built for order data with appropriate indexes, foreign keys, and query optimization. The result:

  • Order list pages load in milliseconds instead of seconds on large stores
  • Bulk operations (status updates, label printing, exports) complete faster
  • Database server CPU usage drops significantly
  • Scaling to 100,000+ orders becomes viable without custom infrastructure

Before You Migrate: Compatibility Check

The most important step is verifying plugin compatibility. Any plugin that directly queries wp_posts or wp_postmeta for order data (instead of using WooCommerce’s order API) will break with HPOS.

WooCommerce provides a compatibility report under WooCommerce → Status → Features. Plugins that are HPOS-compatible declare compatibility explicitly. Check every active plugin before proceeding.

Well-maintained plugins have already added HPOS compatibility — the TheForge EasyPost Shipping plugin is fully HPOS-compatible and has been since the feature entered beta.

Step 1: Create a Full Database Backup

This is non-negotiable. Use your host’s backup tool, WP-CLI, or a plugin like UpdraftPlus to create a complete database backup immediately before migration. Store it somewhere outside your WordPress installation.

Step 2: Enable Compatibility Mode First

WooCommerce offers a Compatibility Mode that runs both the legacy post tables and the new HPOS tables in sync. Enable this first — it lets you test HPOS while keeping legacy data intact as a fallback.

Go to WooCommerce → Settings → Advanced → Features → Order Storage and select “WooCommerce orders tables (compatibility mode)”.

Step 3: Run the Migration

After enabling compatibility mode, WooCommerce will prompt you to run the data migration. This syncs your existing orders into the new HPOS tables. The migration runs in the background via Action Scheduler — for stores with 10,000+ orders, this may take several hours.

Monitor progress under WooCommerce → Status → Scheduled Actions. Don’t run other heavy batch operations while the migration is in progress.

Step 4: Test Thoroughly

With compatibility mode active, test every order-related workflow:

  • Place a new test order and verify it appears correctly
  • Update order status and confirm changes save
  • Generate a shipping label and verify tracking number saves to the order
  • Process a refund
  • Run an order export
  • Check any third-party integrations (CRM, fulfillment, accounting)

Step 5: Switch to HPOS-Only Mode

Once you’ve confirmed everything works correctly in compatibility mode, switch to HPOS-only: WooCommerce orders tables (recommended). This disables the legacy post table sync and runs purely on HPOS.

You’ll immediately notice faster order list loads and quicker bulk operations.

Rollback Plan

If something goes wrong after switching to HPOS-only, you can re-enable compatibility mode, which re-syncs from the HPOS tables back to legacy. If that fails, restore your pre-migration database backup.

Is It Worth It?

For stores with 1,000+ orders, the performance improvement is immediately noticeable. For stores with 10,000+ orders, HPOS migration is essential — the alternative is a database that continues to degrade as you scale. Migrate now while your order volume is manageable rather than waiting until performance becomes a crisis.

Need help with the migration or plugin compatibility questions? Our support team is here to help.