Почему страница заказа в моем магазине WooCommerce работает так медленно?

С момента выхода WooCommerce 8.9 я заметил большое замедление работы, когда я нажимаю на страницу заказа в WooCommerce -> Заказы на моей панели управления. У меня большой магазин с большим количеством заказов, и отображение страницы заказа занимает много секунд.

Это проблема только с включенным HPOS.

Query Monitor возлагает вину на этот медленный запрос:

SELECT DISTINCT meta_key
FROM wp_wc_orders_meta_copy
WHERE meta_key NOT LIKE '\\_%'
ORDER BY meta_key ASC
LIMIT 30;

Что я могу сделать, чтобы ускорить это?

Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
0
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основной причиной этой проблемы с производительностью является следующий префиксный ключ. Чтобы удовлетворить запрос, его необходимо сканировать целиком, что при большом количестве заказов происходит очень медленно.

ALTER TABLE wp_wc_orders_meta ...
ADD KEY meta_key_value (meta_key(191), meta_value(100)), ...

Добавление следующего ключа устраняет медлительность.

ALTER TABLE wp_wc_orders_meta
ADD KEY slow_ordermeta_workaround(meta_key);

Это работает только с таблицами InnoDB с форматом строк DYNAMIC (большинство таблиц в 2024 году).

Если у вас есть wp-cli, вы можете использовать эту команду, чтобы добавить ключ.

wp db query "ALTER TABLE wp_wc_orders_meta ADD KEY slow_ordermeta_workaround(meta_key)"

Другие вопросы по теме