С момента выхода 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;
Что я могу сделать, чтобы ускорить это?
Основной причиной этой проблемы с производительностью является следующий префиксный ключ. Чтобы удовлетворить запрос, его необходимо сканировать целиком, что при большом количестве заказов происходит очень медленно.
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)"