Intereting Posts
Как запрашивать только товары со статусом «на складе» в WooCommerce? Как изменить нижний колонтитул или <div> для разных пользователей в wordpress? Изображения WordPress не обрезаются должным образом Неверное изображение загружает и генерирует изображение сетчатки из источника Отображать и скрывать контент, используя флажок в разделе «Параметры Framework» Сделайте два вида архива типа сообщения по двум URL-адресам как получить идентификатор сообщения в плагине Как это сделать с помощью WordPress? Taxonomies? Как установить привилегию для подписчика wordpress для личной страницы Создание пользовательской формы ответа для комментариев WordPress reCAPTCHA на странице шаблона без плагина Текстовые фрагменты, разделяемые сообщениями Глобальные переменные во время активации, деактивации и удаления плагинов Опубликовать миниатюры, не работающие в моей новой установке WP 3.1 с темой «Двадцать десять» Посты и наследование страниц для дочерних сайтов в сети WordPress

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

У меня проблема с фильтрацией сообщений по специальным полям. На моей странице у меня есть форма с 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 – это быстрая функция
  • Всегда устанавливайте верхний предел количества сообщений, которые вы получаете