1,000,000 Products: Pro vs Lite
Dave Hilditch
•
Super Speedy Imports imported 1,000,000 simple WooCommerce products in about 22 minutes on a modest 4-vCPU server, with external (colour-matched) images and around 10 million term relationships. The paid Pro edition and the free Lite edition ran at the same speed, because they share the same import engine. The wp.org edition, which WordPress.org’s rules require to run single-worker, took about 4x longer. Full per-stage timings, dataset and reproduce steps below.
Summary
- Pro: 1,000,000 products in 22m 30s (wall clock), 18m 23s of import-stage time.
- Lite (free, from GitHub): 21m 28s, essentially identical to Pro. Lite keeps Pro’s full speed engine (parallel workers, direct-mysqli fast path); it only drops paid features, not speed.
- wp.org edition: 87m 07s, about 4x slower. WordPress.org forbids
proc_open, so that build is single-worker with no fast-DB path. - Peak memory: a flat ~128 MB (Pro and Lite), ~141 MB (wp.org). A million-row import does not balloon memory.
- Reproducible: the dataset is a public download and the config is in a public repo, both linked below.
Results
| Metric | Pro | Lite (free) | wp.org |
|---|---|---|---|
| Products imported | 1,000,000 | 1,000,000 | 1,000,000 |
| Wall clock | 22m 30s | 21m 28s | 87m 07s |
| Import stages only | 18m 23s | 17m 24s | 82m 39s |
| Products / sec (stages) | ~907 | ~958 | ~202 |
| Peak memory | 128 MB | 128 MB | 141 MB |
Per-stage breakdown (seconds)
| Stage | Pro | Lite | wp.org |
|---|---|---|---|
| load-csv | 370.4 | 367.9 | 853.0 |
| import-taxonomies | 7.2 | 7.3 | 8.1 |
| insert-posts | 114.2 | 110.2 | 110.1 |
| insert-postmeta | 70.5 | 69.9 | 71.2 |
| upsert-relationships | 192.5 | 169.7 | 190.9 |
| fix-attributes | 328.0 | 298.3 | 3,706.3 |
| Total stage time | 1,102.7 | 1,044.2 | 4,959.4 |
Key findings
- Pro and free Lite are the same speed for simple products. They share the engine; the free Lite download only removes paid features (variable products, ACF fields, PHP-function mapping), none of which a simple-product import uses. If you want full import speed for free, use the GitHub Lite edition.
- The bulk database stages are identical in every edition. insert-posts, insert-postmeta and upsert-relationships are single set-based
INSERT ... SELECTqueries, so parallel workers and the fast-DB path make no difference to them. Even the stripped wp.org build runs these at full speed. - The wp.org slowdown is almost entirely one stage. fix-attributes (WooCommerce global-attribute wiring) goes from 328s to 3,706s single-worker, 62 of its 87 minutes. It is the one heavy stage made of many small queries, which is exactly what parallel workers and the fast-DB path accelerate.
- Comfortably under our headline claim. Even the slowest edition finished a million products in well under two hours; Pro and Lite do it in about 22 minutes on a small box.
Methodology
Environment
- Server: Hetzner cloud, 4 vCPU, 7.6 GB RAM, Ubuntu, MariaDB temp files on disk (not a small tmpfs).
- Stack: WooCommerce, PHP 8.2, MariaDB 10.11, WordPress.
- Plugin: Super Speedy Imports 2.73, run with
--workers=4 --performance. The wp.org build caps to a single worker by design.
Rules and measurement
- Same dataset, same flags, same server, each edition run from an identical clean cold baseline (0 products, 0 terms) restored from a snapshot between runs.
- Headline figure is total wall-clock duration; the import-stage figure excludes worker orchestration and WooCommerce housekeeping.
- One run per edition (indicative, not averaged). Absolute times depend on hardware; a larger box would improve Pro and Lite further and widen the gap to wp.org.
This is not a universal benchmark. Your data shape, hardware and hosting will differ. It is one controlled, reproducible scenario.
Dataset
- Products: 1,000,000 simple WooCommerce products.
- Taxonomies and attributes: hierarchical category, brand, tags, plus five attributes (colour, size, material, pattern, style), about 10 terms per product and ~10 million term relationships.
- Images: external, colour-matched URLs served via our External Images plugin (not downloaded during the import) – the images still display on every product, which makes External Images ideal for affiliate and dropship stores.
Reproduce
- Dataset (311 MB CSV): simple-products-1m.csv
- Config and taxonomies: the
simple-products-1mfolder in the super-speedy-imports-demo-data repo (config.json,taxonomies.json).
- Register the taxonomies:
wp ssi import-taxonomies taxonomies.json - Create the import:
wp ssi create "1M Simple" product simple-products-1m.csv config.json - Run it:
time wp ssi <id> --workers=4 --performance
If your results differ significantly, tell us, we would like to know.

Comments