为大量 post 元优化 WP 元查询?
Optimize WP Meta Query for large amount of post meta?
我有一个大型 WP 站点,其中包含大约 2k 个帖子和 150k 个 postmeta。当浏览到一个大类别时,存档加载非常慢,因为 WP 查询正在寻找特色帖子,首先显示它们。
我知道最终目标是优化 postmeta table,但现在我想知道是否有任何可能的方法来优化下面的元查询(一个在底部)。
我进行了一些调试(参见 //comments
),发现 'compare' => '!='
导致查询变得非常慢。我还发现 ''
或 '<'
大大加快了查询速度,结果相同,但我不确定这是否是正确的方法。如果有办法加快此查询,请告诉我。谢谢
function appthemes_addon_on_top_query( $wp_query ){
$addon_type = $wp_query->get( 'addon_on_top' );
if( ! $addon_type || ! appthemes_addon_exists( $addon_type ) ) {
return;
}
$addon_info = appthemes_get_addon_info( $addon_type );
$flag_key = $addon_info['flag_key']; //custom field for featured posts
$meta_query = (array) $wp_query->get( 'meta_value', 1 );
$meta_query = array_filter( $meta_query );
$meta_query[] = array(
'relation' => 'OR',
array(
'key' => $flag_key,
'compare' => 'NOT EXISTS',
),
array(
'relation' => 'OR',
//Deleting the array below makes the query quick, but i need it to show featured posts first
array(
'key' => $flag_key,
'value' => 1,
),
//Deleting the array below makes the query quick, but i need it to properly sorting the posts by date (see below: $wp_query->set( 'orderby')
array(
'key' => $flag_key,
'value' => 1,
'compare' => '!=', //It is about this comparison. '' or '<' makes the query quick, but i am not sure if that is a proper replacement. Also not sure why '!=' makes it this slow.
),
),
);
$wp_query->set( 'meta_query', $meta_query );
$wp_query->set( 'orderby', array( 'meta_value' => 'DESC', 'date' => 'DESC' ) );
}
好的,我发现 'compare' => '!='
会减慢速度,但 'compare' => '<>'
不会。我猜两者是一样的,所以我想这个问题已经解决了。
我有一个大型 WP 站点,其中包含大约 2k 个帖子和 150k 个 postmeta。当浏览到一个大类别时,存档加载非常慢,因为 WP 查询正在寻找特色帖子,首先显示它们。 我知道最终目标是优化 postmeta table,但现在我想知道是否有任何可能的方法来优化下面的元查询(一个在底部)。
我进行了一些调试(参见 //comments
),发现 'compare' => '!='
导致查询变得非常慢。我还发现 ''
或 '<'
大大加快了查询速度,结果相同,但我不确定这是否是正确的方法。如果有办法加快此查询,请告诉我。谢谢
function appthemes_addon_on_top_query( $wp_query ){
$addon_type = $wp_query->get( 'addon_on_top' );
if( ! $addon_type || ! appthemes_addon_exists( $addon_type ) ) {
return;
}
$addon_info = appthemes_get_addon_info( $addon_type );
$flag_key = $addon_info['flag_key']; //custom field for featured posts
$meta_query = (array) $wp_query->get( 'meta_value', 1 );
$meta_query = array_filter( $meta_query );
$meta_query[] = array(
'relation' => 'OR',
array(
'key' => $flag_key,
'compare' => 'NOT EXISTS',
),
array(
'relation' => 'OR',
//Deleting the array below makes the query quick, but i need it to show featured posts first
array(
'key' => $flag_key,
'value' => 1,
),
//Deleting the array below makes the query quick, but i need it to properly sorting the posts by date (see below: $wp_query->set( 'orderby')
array(
'key' => $flag_key,
'value' => 1,
'compare' => '!=', //It is about this comparison. '' or '<' makes the query quick, but i am not sure if that is a proper replacement. Also not sure why '!=' makes it this slow.
),
),
);
$wp_query->set( 'meta_query', $meta_query );
$wp_query->set( 'orderby', array( 'meta_value' => 'DESC', 'date' => 'DESC' ) );
}
好的,我发现 'compare' => '!='
会减慢速度,但 'compare' => '<>'
不会。我猜两者是一样的,所以我想这个问题已经解决了。