wordpress sorgu özel alanlar ve kategori

1 Cevap php

I have a query that creates a table view and then another that queries the view. The results are extremely slow. Here is the code:

create or replace view $view_table_name as select * from wp_2_postmeta where post_id IN (                           
                        select ID FROM wp_2_posts wposts 
                            LEFT JOIN wp_2_term_relationships ON (wposts.ID = wp_2_term_relationships.object_id) 
                            LEFT JOIN wp_2_term_taxonomy ON (wp_2_term_relationships.term_taxonomy_id = wp_2_term_taxonomy.term_taxonomy_id) 
                        WHERE wp_2_term_taxonomy.taxonomy = 'category'
                            AND wp_2_term_taxonomy.parent = $cat || wp_2_term_taxonomy.term_id = $cat                                                                                                                       
                            AND wposts.post_status = 'publish' 
                            AND wposts.post_type = 'post')

$ Değerler sonuçlar için görünüm tablosunu sorgular bu örneğin koydum edilmiştir.

select distinct(ID)
FROM $view_table_name wposts
    LEFT JOIN wp_2_postmeta wpostmeta
        ON wposts.ID = wpostmeta.post_id
WHERE post_status = 'publish'
    AND ID NOT IN (SELECT post_id
                   FROM wp_2_postmeta
                   WHERE meta_key = '$var' && meta_value = '$value1')
    AND ID NOT IN (SELECT post_id
                   FROM wp_2_postmeta
                   WHERE meta_key = '$var' && meta_value = '$value2')
    AND ID NOT IN (SELECT post_id
                   FROM wp_2_postmeta
                   WHERE meta_key = '$var' && meta_value = '$value3')
    AND postmeta.meta_key = 'pd_form'
ORDER BY CASE wpostmeta.meta_value
             WHEN '$value5' THEN 1
             WHEN '$value6' THEN 2
             WHEN '$value7' THEN 3
             WHEN '$value8' THEN 4
             WHEN '$value9' THEN 5
             WHEN '$value10' THEN 6
             WHEN '$value11' THEN 7
             WHEN '$value11' THEN 8
         END;

1 Cevap

Burada asıl sorun, IN durumda bir alt sorgu olduğunu. Bunun yerine alt sorgu yürütme ve sonra yazışmalar için dış tablo denetimi, MySQL dış tablodaki her satır için yürütülen bir ilişkili alt sorgu içine sorgu dönüştürmek bilinmektedir.

Her zamanki çözüm JOIN lehine IN içinde sorguda kurtulmak için.

Bir başka sorun aslında (MySQL önemsiz olduğu zaman optimize etmek genellikle yeterince akıllı olduğunu, ama yine de size ifade etmelidir ihtiyacınız yok olsa OUTER JOIN yerine iç JOIN kullanımı olduğunu sizin niyet daha açık bir şekilde).

Ve bir şey daha. Her iki sorgu dinamik olarak oluşturulan gibi görünüyor. Sorguyu kendisi optimize yanında, bir arama kodunu kırmak için değil nasıl düşünmek gerekir. Ama bu zor olabilir.

Wordpress optimize her zaman ilginç bir sorundur.