【发布时间】:2021-09-23 06:20:35
【问题描述】:
我在这里有大约 25,000 个帖子(并且还在增加)。所有这些都在自定义帖子类型“潜在客户”下。 每个帖子都有元信息,包括一个名为“uniqid”的变量。 这个 uniqid 是一个 url 参数。现在我需要这个 uniqid 所在的帖子 ID。
现在我的问题是是否有办法加快这一决定。
wp_query 和 get_results 一次我尝试了 2 种方法。
我之所以问,是因为这个确定帖子 ID 的函数总是被插件“查询监视器”指出它很慢。
这是两种方法,都有效。我只是想知道这里是否可以加速?
WP_Query 解决方案。
$post_id = false;
$args = array(
'posts_per_page' => -1,
'post_type' => 'lead',
'fields' => 'ids',
'orderby' => 'date',
'order' => 'ASC',
'post_status' => 'publish',
'meta_key' => 'uniqid',
'meta_value' => $uniqid
);
$query = new WP_Query( $args );
if( $query->have_posts() ) {
while( $query->have_posts() ) {
$query->the_post();
// Get Post ID for return
$post_id = get_the_id();
// Break loop, when matching id was found
$uniqidGPM = get_post_meta( $post_id, 'uniqid' , true );
if($uniqidGPM == $uniqid) {
$post_found = true;
break;
}
}
}
wp_reset_postdata();
return $post_id;
select get_results 解决方案。
$post_id = false;
global $wpdb;
$selectQuery = "SELECT wp_wkdm_posts.ID FROM wp_wkdm_posts INNER JOIN wp_wkdm_postmeta ON ( wp_wkdm_posts.ID = wp_wkdm_postmeta.post_id ) WHERE 1=1 AND ( ( wp_wkdm_postmeta.meta_key = 'uniqid' AND wp_wkdm_postmeta.meta_value = '".$uniqid."' )) AND wp_wkdm_posts.post_type = 'lead' AND ((wp_wkdm_posts.post_status = 'publish')) GROUP BY wp_wkdm_posts.ID ORDER BY wp_wkdm_posts.post_date ASC";
$selectQueryResult = $wpdb->get_results($selectQuery);
if (empty($selectQueryResult)) {
return $post_id;
}else{
$post_id = $selectQueryResult[0]->ID;
return $post_id;
};
【问题讨论】:
-
第一次尝试循环内的检查有什么意义?您已经受到限制,只能在查询本身内设置此唯一 ID 的帖子。
-
另外,按日期(或按任何东西,真的)排序的意义何在 - 您是否拥有多个具有这样“唯一”ID 的帖子?跨度>
-
首先评估 WHERE 子句,只有在确定相关记录之后,那些才会被排序。因此,除非您可以拥有 多个 具有您正在寻找的唯一 ID 的记录,并且只想选择其中最新的记录,否则这不会给您带来任何好处。
-
根据我的经验,我可以告诉你,一旦 postmeta 变胖,如果你想照顾性能,你就会走上一条非常糟糕的道路。你应该尽你所能避免 postmeta 变大。如果为时已晚,请尽可能多地清洁它
-
不,帖子先过滤,再排序。 stackoverflow.com/a/24128128/1427878