Множественные внутренние соединения get_posts WooCommerce / WordPress

#php #mysql #wordpress #performance #woocommerce

#php #mysql #wordpress #Производительность #woocommerce

Вопрос:

Я запускаю WooCommerce с темой Storefront, и мои страницы категорий работают довольно медленно. Когда я отслеживаю запрос, я вижу несколько внутренних соединений в «term_taxonomy_id»

 WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (25) 
      AND tt1.term_taxonomy_id IN (25,268477,268482,268506,268507 etc etc) 
      AND AND tt2.term_taxonomy_id IN (25,268477,268482,268506,268507 etc etc)
  

но когда я запускаю (в phpmyadmin) тот же запрос без внутренних соединений для tt1.term_taxonomy_id и tt2.term_taxonomy_id, я получаю те же результаты.

Я попытался избавиться от этих внутренних соединений, подключив функцию к pre_get_posts

 if ( isset ( $wp_query->query_vars['product_cat'] ) ) {
        $wp_query->set('tax_query', array( array (
            'taxonomy' => 'product_cat',
            'terms' => 25,
            'include_children' => false
        ) ) );
    }
  

но это не влияет на запрос. Кто-нибудь знает, как это сделать?

Комментарии:

1. Вы имеете в виду что-то другое, кроме отказа от woocommerce?

2. Да, кроме как избегая woocommerce.

3. Чего я не понимаю, так это почему в одной таблице есть несколько внутренних соединений (wp_term_relationships), потому что я не понимаю, почему это актуально? И как мне изменить tax_query, чтобы он не присоединялся несколько раз.