Intereting Posts
Отображение 3 сообщений с разной разметкой HTML с использованием цикла Ошибки SSL при активации моей настраиваемой темы Объединить внутренний поиск с пользовательским поиском Google? Правильное использование wp_enqeue_style Добавить 2 значения в post__not_in Как удалить пост-перенаправления Отображение первой категории из пользовательской таксономии с помощью get_the_terms Необходимо добавить / удалить группу параметров и отобразить их как строки Как автозаполнение или автозапуск для комментариев WordPress? Любой способ создать запланированное сообщение программно? Преобразование пользовательских таблиц на основе данных для поиска wp_ajax не вызывает действие Переписать страницу с пропуском перед именем страницы Как получить сообщения, опубликованные между датой и сегодня? Как применить следующие / предыдущие классы к LI для ссылок на страницы?

Медленный мета-запрос с несколькими мета-ключами

У меня проблема с фильтрацией сообщений по специальным полям. На моей странице у меня есть форма с 15 условиями (радиообъекты и входы), и я хотел бы фильтровать с ними свой собственный тип сообщения PROJEKT. Моя проблема связана с очень медленным запросом, когда я использую так много мета-ключей. Это мой код:

$posts = get_posts(array( 'numberposts' => -1, 'post_type' => 'projekt', 'post_status' => 'publish', 's' => $s, 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'technologia_wyszukiwarka', 'value' => $techs, 'compare' => 'LIKE' ), array( 'key' => 'zabudowa_wyszukiwarka', 'value' => $styls, 'compare' => 'LIKE' ), array( 'key' => 'garaz_wyszukiwarka', 'value' => $garazs, 'compare' => 'LIKE' ), array( 'key' => 'mdm_wyszukiwarka', 'value' => $mdms, 'compare' => 'LIKE' ), array( 'key' => 'powierzchnia_wyszukiwarka', 'value' => $pows, 'compare' => 'LIKE' ), array( 'key' => 'kondygnacja_wyszukiwarka', 'value' => $konds, 'compare' => 'LIKE' ), array( 'key' => 'ogrzewanie_wyszukiwarka', 'value' => $ogrzewanies, 'compare' => 'LIKE' ), array( 'key' => 'liczba_pokoi_wyszukiwarka', 'value' => $pokojes, 'compare' => 'LIKE' ), array( 'key' => 'inne_wyszukiwarka', 'value' => $innes, 'compare' => 'LIKE' ), array( 'key' => 'kat_dachu_wyszukiwarka', 'value' => array($katods,$katdos), 'compare' => 'BETWEEN', 'type' => 'NUMERIC' ), ), )); 

Время моего запроса WP_Query->get_posts – это примерно 10 WP_Query->get_posts . Но когда я удаляю последние условия kat_dachu_wyszukiwarka время короче и приемлемо 0,5 секунды, я проверил его с помощью Query Monitor. К сожалению, мне нужно это поле и несколько полей больше. Поэтому мой вопрос: как я могу выполнить свой запрос быстрее?

Solutions Collecting From Web of "Медленный мета-запрос с несколькими мета-ключами"

Проблема здесь в том, что post meta не была предназначена для этих видов поиска, поэтому таблицы таксономии существуют, иначе категории и теги будут храниться как мета-сообщение

  • Post meta оптимизирована для получения данных, когда вы уже знаете идентификатор сообщения
  • Таксономии оптимизированы для поиска сообщений, когда вы уже знаете данные

Многие ваши пользовательские поля были бы более уместными как неиерархические таксономии с тем же именем.

Что касается ускорения вашего мета-запроса, мне жаль говорить, но то, что вы пытаетесь сделать, принципиально дорого, и нет никакого способа обойти это. Вы можете попытаться кэшировать результат, но это не оптимально.

Вам нужно будет изменить свой запрос, чтобы использовать таксономии, что означает изменение ваших данных. Либо перемещение некоторых метаданных сообщений в таксономии, либо одновременное хранение данных как в метатетах, так и в таксономиях.

Потенциальные способы смягчения этого включают эластичные кластеры поиска

Вы также указали -1 для максимального количества сообщений, что может быть опасно. Если возвращается 10 000 сообщений, ваш сервер может перерыть время, и ваша база данных может быть перегружена. Всегда устанавливайте верхний предел, даже если это тот, который вы никогда не ожидаете достичь

Резюме

  • Использование мета-запросов для поиска сообщений очень дорого
  • Post meta не создается для фильтрации
  • Таксономии были созданы для фильтрации, и они значительно быстрее для этого
  • Post meta предназначен для тех get_post_meta когда вы уже знаете, какие сообщения, поэтому get_post_meta – это быстрая функция
  • Всегда устанавливайте верхний предел количества сообщений, которые вы получаете