WP_Query Problemas de rendimiento con meta_query

2

Estoy trabajando en una plantilla personalizada para un nuevo tema que usa una instancia WP_Query para seleccionar publicaciones de 2 tipos de publicaciones con 2 campos personalizados que NO están vacíos. Dependiendo de la sección del sitio, se puede configurar una variable $current_zone para determinar la categoría a consultar.

// Custom loop
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$custom_loop_args = array(
    'post_type' => array('videos', 'post'),
    'post_status' => 'publish',
    'ignore_sticky_posts' => 1,
    'paged' => $paged,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'article_source',
            'compare' => '!=',
            'value' => ''
        ),
        array(
            'key' => 'article_link',
            'compare' => '!=',
            'value' => ''
        )
    )
);

// Check the current zone
global $current_zone;

// Check for category match to current zone
if ( term_exists($current_zone, 'category') ) {
    $term = get_term_by('name', $current_zone, 'category');
    $custom_loop_args['cat'] = $term->term_id;
}

// Create unique identifier for caching
$cache_id = ( isset($term) ) ? '_term-' . $term->term_id : '_main';

// Run query or get transient cache
if ( ( $custom_loop = get_transient( "curated_wpquery$cache_id" ) ) === false ) {

    // It wasn't there, so regenerate the data and save the transient
    $custom_loop = new WP_Query( $custom_loop_args );
    set_transient( "curated_wpquery$cache_id", $custom_loop, ( 60 * 60 * 1 ) );
}

Estoy usando los transitorios en un esfuerzo por acelerar esto, lo que sí funciona, pero la consulta inicial toma 35 segundos y una cantidad de memoria loca para completar. Tenemos una base de datos bastante grande, con aproximadamente 10,553 registros en la tabla posts . He eliminado las revisiones, pero no he notado un aumento en el rendimiento.

Entonces, mi pregunta real es, ¿cómo puedo mejorar el rendimiento de esta consulta? ¿Sería mejor una consulta personalizada $wpdb , o la consulta de campos personalizados de esta manera no es productiva en absoluto?

Cualquier ayuda es muy apreciada.

    
pregunta Kevin Leary 10.10.2012 - 15:10

1 respuesta

5

Los datos del campo personalizado se almacenan en la tabla postmeta , y es probable que el escaneo a través de esta tabla esté causando lentitud.

Deberías:

  • instale el complemento de barra de depuración que le dará más información sobre las consultas que se están ejecutando en contra de Base de datos: podrá ver cuánto tarda cada consulta y el código SQL real que se está ejecutando.
  • Encuentre las consultas que tardan mucho tiempo en ejecutarse, y EXPLAIN ellas . Esto le dará una mejor idea de lo que está pasando y cómo proceder.
respondido por el anu 10.10.2012 - 15:32

Lea otras preguntas en las etiquetas