[英]wordpress query custom fields and category
我有一个查询,该查询创建一个表视图,然后另一个查询该视图。 结果非常慢。 这是代码:
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')
在此示例中,将$ values放入了查询结果的视图表中。
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;
这里的主要问题是处于IN
条件的子查询。 代替执行子查询然后在外部表中检查对应关系,MySQL已知将查询转换为相关的子查询,该子查询针对外部表中的每一行执行。
通常的解决办法是摆脱在子查询的IN
赞成的JOIN。
另一个问题是,尽管实际上并不需要它,但您使用OUTER JOIN
代替了内部JOIN
(MySQL通常足够聪明,可以在琐碎的情况下对其进行优化,但是无论如何,您应该更清楚地表达自己的意图)。
还有一件事。 这两个查询似乎都是动态生成的。 除了优化查询本身之外,还应该考虑如何不破坏调用代码。 不过,这可能很棘手。
优化wordpress始终是一个有趣的挑战。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.