Consulta de meta lenta com multi-meta-chaves

Tenho problemas com a filtragem de postagens por campos personalizados. Na minha página, eu tenho formulário com 15 condições (radiobutons e inputs) e gostaria de filtrar com eles o meu tipo de postagem personalizado PROJEKT. Meu problema é com uma consulta muito lenta quando eu uso tantas meta-chaves. Este é o meu código:

$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' ), ), )); 

Meu tempo de consulta WP_Query->get_posts é algo sobre 10s. Mas quando eu excluir as últimas condições kat_dachu_wyszukiwarka o tempo é mais curto e aceitável 0,5 segundos, verifiquei com o Query Monitor. Infelizmente eu preciso desse campo e poucos campos mais. Então, minha pergunta é como posso fazer minha consulta mais rápido?

Solutions Collecting From Web of "Consulta de meta lenta com multi-meta-chaves"

O problema aqui é que o post meta não foi projetado para esses tipos de pesquisas, é por isso que as tabelas de taxonomia existem, senão categorias e tags seriam armazenados como pós meta

  • Post meta está otimizado para obter dados quando você já conhece o ID da postagem
  • As taxonomias são otimizadas para encontrar postagens quando você já conhece os dados

Muitos dos seus campos personalizados seriam mais apropriados como taxonomias não hierárquicas do mesmo nome.

No que diz respeito à aceleração da sua consulta meta, lamento dizer que o que você está tentando fazer é fundamentalmente caro e não há como contornar. Você pode tentar armazenar em cache o resultado, mas isso é sub-ótimo.

Você precisará alterar sua consulta para usar taxonomias, o que significa modificar seus dados. Ou movendo alguns metadados pós para taxonomias, ou armazenando os dados tanto na meta como na taxonomia ao mesmo tempo.

As formas potenciais de mitigar isso envolvem clusters de busca elástica

Você também especificou -1 para o número máximo de postagens, o que pode ser perigoso. Se 10.000 postagens forem devolvidas, o servidor poderá demorar e sua base de dados pode estar sobrecarregada. Sempre configure um limite superior, mesmo que seja aquele que você nunca espera alcançar

Resumo

  • O uso de meta-consultas para encontrar postagens é super caro
  • Post meta não foi criado para filtrar
  • As taxonomias foram construídas para a filtragem e são significativamente mais rápidas para isso
  • Post meta é projetado para quando você já sabe quais postagens, então get_post_meta é uma function rápida
  • Sempre coloque um limite superior em quantos posts você está procurando