HPOS, High-Performance Order Storage, is how WooCommerce stores orders today: in tables of their own, built for orders. Before, orders lived in WordPress’s shared tables for posts, and many older stores still do, because nobody has switched.
This guide explains what the difference is, what gets faster and what doesn’t, how to see what your store uses, and what to check before you switch.
What is HPOS?
In the old model, an order is a post of the type shop_order in wp_posts, the same table as pages, blog posts and products. Everything that describes the order, such as addresses, amounts, payment method and shipping status, is stored as separate rows in wp_postmeta: one row per piece of information.
With HPOS, orders live in four tables that are only for orders: wc_orders for the order itself, wc_order_addresses for the billing and shipping address, wc_order_operational_data for WooCommerce’s own operational data and wc_orders_meta for what plugins store on the order. According to WooCommerce’s HPOS documentation, it has been the default for new stores since WooCommerce 8.2, released in October 2023.
Why the old model gets slow
wp_postmeta is built to store anything at all: a name and a value per row. That makes it flexible, but not fast to search. When WooCommerce has to find orders with a particular email, filter by payment method or sort by amount, the database has to look through values that aren’t indexed for it, and gather many rows per order.
At the same time, orders share the tables with everything else on the site. Each new order adds a row to wp_posts and many to wp_postmeta, so the tables grow with your sales, and that affects queries that have nothing to do with orders too. HPOS gives orders fixed columns with indexes for exactly the lookups WooCommerce makes. How to make the database fast in general is covered in our guide to WordPress database performance.
What gets faster, and what doesn’t
HPOS is about orders. That’s where you notice it:
- The orders list in the admin: viewing, filtering and searching by name, email or order number.
- Creating orders at checkout: fewer rows to write per order.
- Reports and plugins that look up orders: when they use WooCommerce’s own functions to do it.
- The rest of the database:
wp_postsandwp_postmetastop growing with every order.
Products still live in wp_posts, so HPOS doesn’t make product and category pages faster, and a slow home page has another cause. If it’s mainly the orders list and the admin that are slow, HPOS is often the first thing to look at. The other causes are in our guide to a slow WooCommerce admin. If the whole store is slow, start with the troubleshooting guide.
Does your store use HPOS?
Go to WooCommerce → Settings → Advanced → Features. Under order data storage, it says whether the store uses High-performance order storage or the legacy WordPress posts storage. You can also tell from the address when you open the orders list: with HPOS it’s admin.php?page=wc-orders, with the old model edit.php?post_type=shop_order.
Stores started before WooCommerce 8.2 usually still use the old model. Updating WooCommerce doesn’t switch the storage by itself. It has to be done on purpose.
Your plugins have to keep up
What decides whether you can switch is your plugins. A plugin that reads and writes orders through WooCommerce’s own functions works with both models. A plugin that goes straight to wp_posts and wp_postmeta won’t see the orders stored in the new tables. The same goes for old custom code in the theme or in a small plugin a previous developer wrote.
Plugins declare whether they’re compatible, and WooCommerce shows a warning listing the ones that aren’t on the same page as the setting. It’s typically shipping, payment, invoicing, accounting and inventory plugins that touch orders. If a plugin is marked incompatible, look for a newer version and ask its developer. If it isn’t marked either way, test it on a copy.
Compatibility mode: both tables at once
WooCommerce can keep the old and new tables in sync, so the orders exist in both places. This is called compatibility mode. When you turn it on, WooCommerce copies existing orders over in the background, in batches through the scheduled actions queue, and writes new orders to both.
That’s the bridge that makes the switch safe: as long as both sides are in sync, you can switch back and forth. But writing every order twice has a cost, so compatibility mode is a transition, not a permanent setting. It also assumes the queue actually runs. If it’s already long or full of failures, clean it up first. Why it should run from the server is covered in the section on background jobs.
How to switch, in short
- Take a backup, and make a copy of the store you can test on.
- Go through the warning about incompatible plugins, and update or replace them.
- Turn on compatibility mode, and wait until every order is synced. WooCommerce shows how many are left.
- Switch to HPOS on the copy, and go through the whole flow: a new order, payment, shipping, invoicing, a refund and the integrations that receive orders.
- Do the same on the live store, at a quiet time, and leave sync running for a while so you can switch back.
- Turn off compatibility mode once you’re sure everything works.
We go through each step, and what to watch along the way, in migrating to HPOS without downtime.
If a big sale is coming up soon, such as Black Friday, switch well ahead or wait until after. A switch isn’t something you want to be testing in your busiest week.
Frequently asked questions
Can I switch back if something goes wrong?
Yes, as long as compatibility mode is on and both sides are in sync. That’s why you only turn it off once you’re sure.
Will I lose orders when I switch?
Not if the sync has finished before you switch. The old data stays in wp_posts and wp_postmeta. Take a backup first anyway.
Does HPOS make my store faster for customers?
Mostly in the admin and when orders are created. Product pages, categories and the home page don’t get faster from HPOS alone.
Want help?
The hard part of HPOS is rarely the switch itself, but knowing whether every plugin and integration can keep up. If you’d like us to check, read about optimizing your WooCommerce store. We take a free look at your store first and tell you what it will take.