Оптимизировать WP Meta Query для большого количества пост-мета? - PullRequest
0 голосов
/ 17 мая 2018

У меня большой сайт WP с около 2 тыс. Постов и 150 тыс. Постметов.При просмотре большой категории архив загружается очень медленно из-за запроса WP, который ищет избранные сообщения, чтобы показать их в первую очередь.Я знаю, что конечной целью является оптимизация таблицы postmeta, но сейчас я хотел бы знать, есть ли какой-нибудь возможный способ оптимизации мета-запроса (один внизу) ниже.

Я провел некоторую отладку (см. //comments) и обнаружил, что 'compare' => '!=' вызывает очень медленный запрос.Я также обнаружил, что '' или '<' значительно ускоряет запрос, с теми же результатами, но я не уверен, что это правильный путь.Пожалуйста, дайте мне знать, если есть способ ускорить этот запрос.Спасибо

function appthemes_addon_on_top_query( $wp_query ){

    $addon_type = $wp_query->get( 'addon_on_top' );

    if( ! $addon_type || ! appthemes_addon_exists( $addon_type ) ) {
        return;
    }

    $addon_info = appthemes_get_addon_info( $addon_type );
    $flag_key   = $addon_info['flag_key']; //custom field for featured posts
    $meta_query = (array) $wp_query->get( 'meta_value', 1 );
    $meta_query = array_filter( $meta_query );
    $meta_query[] = array(
        'relation' => 'OR',
        array(
            'key'     => $flag_key,
            'compare' => 'NOT EXISTS',
        ),
        array(
            'relation' => 'OR',
            //Deleting the array below makes the query quick, but i need it to show featured posts first
            array(
                'key'   => $flag_key,
                'value' => 1,
            ),
            //Deleting the array below makes the query quick, but i need it to properly sorting the posts by date (see below: $wp_query->set( 'orderby')
            array(
                'key'     => $flag_key,
                'value'   => 1,
                'compare' => '!=', //It is about this comparison. '' or '<' makes the query quick, but i am not sure if that is a proper replacement. Also not sure why '!=' makes it this slow.
            ),
        ),
    );

    $wp_query->set( 'meta_query', $meta_query );
    $wp_query->set( 'orderby', array( 'meta_value' => 'DESC', 'date' => 'DESC' ) );
}

1 Ответ

0 голосов
/ 22 мая 2018

Хорошо, я обнаружил, что 'compare' => '!=' замедляет его, а 'compare' => '<>' - нет.Я думаю, что оба одинаковы, поэтому я думаю, что этот вопрос решен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...