Fast Woo Order Lookup
Fast Woo Order Lookup

Fast Woo Order Lookup

OllieJones

WooCommerce’s Order and Subscription pages allow store owners to search for orders and subscriptions by customer name, email, and other attributes. By default, it does a general substring search. For example, if you put OllieJones into the search box, it will search with LIKE '%OllieJones%' using the leading wildcard %. That’s astonishingly slow on sites with many orders.

Upon activation this plugin runs a background process to create a special-purpose index table, a table of trigrams, to speed up that search. Then it uses those trigrams to search for orders.

The downside: the trigram table takes database space and takes time to generate.

The orders page itself contains a very slow query (to be fixed in Woocommerce 9.0.0) to look up meta_keys. This fixes that query’s performance too.

Credits

Thanks to Leho Kraav for bringing this problem to my attention.

Thanks to Sebastian Sommer and Maxime Michaud for using early versions of the plugin on large stores, and to Maxime Michaud for creating the transation into French.

Thanks to Jetbrains for the use of their software development tools, especially PhpStorm. It’s hard to imagine how a plugin like this one could be developed without PhpStorm’s tools for exploring epic code bases like WordPress’s.

How can I learn more about making my WordPress site more efficient?

We offer several plugins to help with your site’s database efficiency. You can read about them here.

What’s the background for this?

See this WooCommerce issue for an example of the performance problem store owners have. See this Subscriptions issue for another example.

What’s the fix?

Build a trigram lookup table, maintain it, and use it for the queries.

How much space does the trigram lookup table take?

It takes about 5-10KiB per order, as MariaDB / MySQL database storage, counting both data and indexes. So, if your site has a million orders, the table will take something like 5-10 GiB.

How long does it take to generate trigram lookup table?

When you activate the plugin, it starts generating the table in the background. Everything continues as normal while the plugin is generating the table.

Generating the table seems to take about ten seconds (in the background) for every thousand orders.

Does it work with High Performance Order Storage (HPOS)?

Yes.

Does it work with pre-HPOS order storage?

Yes.

The lookup table seems to be out of date. I can’t find recent orders. What do I do?

  1. Let the author know by creating an issue at https://github.com/OllieJones/fast-woo-order-lookup/issues
  2. Deactivate, then activate the plugin. This rebuilds the lookup table.

What is this wp_fwol table created by the plugin?

This table, named with an abbreviation for “Fast Woo Order Lookup”, contains the trigram lookups. It has a terse name to keep queries short. It is dropped automatically if you deactivate the plugin.

My store only has a few hundred orders. Do I need this plugin ?

This plugin addresses database performance problems that only show themselves on stores with many tens of thousands of orders. If your store is smaller than that you probably don’t need it.

Wise owners of rapidly growing stores return regularly to examine their site performance. If your site is still small, it’s better to wait until you actually need performance-enhancing plugins and other features. Installing them “just in case” is ineffective.

Boosting WooCommerce Search Speed with Fast Woo Order Lookup

By Maxime Michaud (maximemichaud) on September 14, 2024

We've been using Index WP MySQL For Speed for some time, and the creator also recommended the Fast Woo Order Lookup plugin. This plugin seems to function correctly, and the method used to accelerate searches is ingenious. The order search feature was a frequent offender in our MySQL slow query log, but it seems to be much less of an issue now. According to both customer service testimonials and personal experience, searches are significantly faster. Previously, a search could take up to ten seconds now, it often takes about three seconds. There are times when it may take slightly longer, but generally, it's much quicker.

One downside of this plugin—which I personally don’t consider a negative—is that the trigram table uses about 6.4GB of space. It’s also worth mentioning that we have over 630,000 orders on the site in question.

We therefore recommend this plugin if you're looking to reduce search times for anyone needing to look up orders on your site. It will enhance their productivity and also reduce processing time to deliver the desired results.

We haven’t encountered any problems with this plugin, but I should mention that it should be implemented by someone with some technical knowledge to measure the impact it will have. This can depend on whether your site has plugins that modify certain aspects. Also, if your site is inherently slow, this plugin won’t perform miracles to solve underlying issues.

Sped Up My Slow Admin Pages

By slservice33 on September 3, 2024

I've had very slow wp-admin and woocommerce admin pages for a while now. Query monitor plugin showed a very high number of database queries from the woocommerce plugin. No idea why.

Installing this plugin and Index WP mySQL For Speed plugin has immediately reduced the very high number of queries and sped up both wp-admin and woocommerce admin pages.

Thank you very much and I hope my admin stays working this quick !

This plugin is a game changer for WooCommerce!

By blockagency on July 19, 2024

I have been using Oliver's plugins for years and they are amazing.

This one is no exception.

It improved the time to search for orders on a site with over 130,000 orders from 120 seconds to just 3 seconds!

Just one question: does this plugin keep generating the indexes over and over again? Because I get this message constantly on the site:

“Fast Woo Order Lookup indexing still in progress. 100% complete. See the Scheduled Actions status page for details.”

And when this happens, the site backend and order lookup slows down again.

1.1.2 September 20, 2024

1.1.1 August 12, 2024

  • Limit batch runtime to 25 seconds. Include a cronjob shell script to purge stale ActionScheduler actions.

1.1.0 August 11, 2024

  • Some MariaDB / MySQL versions implicitly cast integers to latin1 strings causing problems. Explicit casting fixes the issue.

1.0.2 August 5, 2024

  • Load the meta_names cache during activation; don’t let it expire.

1.0.0 July 3, 2024

  • Allow searching on order number and transaction id fields.
  • Keep a cache of the meta_names for order custom fields to avoid repeating a very slow query.

0.5.0 July 1, 2024

  • Improved compatibility with WooCommerce 9.0.0+.

  • Add advice to readme.txt suggesting a new key on wp_wc_orders_meta for very large sites.

0.4.1 June 15, 2024

  • Make the patch for slow order-page viewing compatible with WooCommerce 8.9.3.
  • Fix a presentation defect in the table-generation notify message.

0.4.0 May 10, 2024

Patch the query to look up distinct public meta_key values.

0.3.0 April 25, 2024

Use JOINs rather than IN to get better performance. Shorten the table and column names.

0.2.6 April 15, 2024

Notice, localization, phpcs:ignore

0.2.5 April 13, 2024

Background loading. Correct handling of HPOS variant queries (from the dropdown).

0.2.4 April 6, 2024

Ingest wp_wc_order_addresses info when creating trigram table, and handle pre-HPOS sites correctly.

0.2.2 April 1, 2024

Perform trigram inserts in batches.

0.2.1 March 26, 2024

Keep up with changes to orders.

= 0.1.4 March 23, 2024

Use trigrams, support both traditional and HPOS orders.

= 0.1.3 March 21, 2024

Build a text index table and use it.

= 0.1.2 November 24, 2023

Add support for speeding Subscriptions searches.

= 0.1.1 November 19, 2023

Birthday of Fast Woo Order Lookup. And, the birthday (in 1988) of the author’s daughter Catharine.

Follow the usual procedure for installing a plugin from the wordpress.org plugin repository.

Reviews

5 out of 5 stars

  • Version: 1.1.2
  • Last updated: 2 weeks ago
  • Active installations: 100
  • WordPress version: 5.8
  • Tested up to: 6.6.2
  • PHP version: 5.6