Intereting Posts
Проблема WP_query без сообщений Независимый инструмент поиска, который возвращает точное соответствие заголовка сообщения Как получить ТОЛЬКО URL-адрес изображения, отображаемого show_media_header? Быстрая публикация публикации post hook template_redirect и заголовок Получайте следующие и предыдущие 3 сообщения в одном сообщении на одной странице Запрос даты для настраиваемого мета поля Поиск темы Twenty Twelve не найден WP API для получения всех записей медиа / сообщений, если счетчик больше 100 Каков наиболее эффективный способ внедрения системы уведомлений? Скрыть вкладку профиля Buddypress для посетителей, а не войти в систему. Проверьте, вызван ли частичный файл из header.php или footer.php Получение данных пользовательского поля из иерархии страниц Как правильно использовать partials в functions.php? Подключить пользовательские правила перезаписи и переменные запроса к навигации wordpress

Проблемы производительности WP_Query с meta_query

Я работаю над настраиваемым шаблоном для новой темы, которая использует экземпляр WP_Query для выбора сообщений из 2 типов сообщений с двумя настраиваемыми полями, которые НЕ пусты. В зависимости от раздела сайта переменная $current_zone может быть установлена ​​для определения категории запроса.

 // 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 ) ); } 

Я использую переходные процессы, чтобы ускорить это, что действительно работает, но исходный запрос занимает 35 секунд и сумасшедший объем памяти. У нас есть довольно большая база данных, из которых около 10552 записей в таблице posts . Я очистил ревизии, но не заметил увеличения производительности.

Итак, мой реальный вопрос: как я могу улучшить производительность этого запроса? $wpdb бы лучший пользовательский запрос $wpdb или запрашивает пользовательские поля таким образом, что он неэффективен вообще?

Буду признателен за любую оказанную помощь.

Solutions Collecting From Web of "Проблемы производительности WP_Query с meta_query"

Пользовательские данные полей хранятся в таблице postmeta , и вполне вероятно, что сканирование через эту таблицу вызывает медленность.

Вам следует:

  • установите плагин debug bar, который даст вам больше информации о запросах, которые выполняются в базе данных, – вы сможете увидеть, сколько времени занимает каждый запрос, и фактический код SQL, который выполняется.
  • Найдите запросы, которые занимают много времени, и EXPLAIN их . Это даст вам гораздо лучшее представление о том, что происходит и как действовать.