mariadb 如何在WordPress中加速SQL_CALC_FOUND_ROWS查询?

f5emj3cl  于 2022-12-04  发布在  WordPress
关注(0)|答案(1)|浏览(144)

我的MariaDB慢查询日志显示了下面的很多。

Time: 221202 11:46:57
Query_time: 5.022055  Lock_time: 0.000082  Rows_sent: 5  Rows_examined: 447119
Rows_affected: 0  Bytes_sent: 141
SELECT SQL_CALC_FOUND_ROWS  ab_posts.ID
                    FROM ab_posts  LEFT JOIN ab_postmeta ON ( ab_posts.ID = ab_postmeta.post_id AND ab_postmeta.meta_key = 'cid' )  LEFT JOIN ab_postmeta AS mt1 ON ( ab_posts.ID = mt1.post_id )
                    WHERE 1=1  AND ( 
  ab_postmeta.post_id IS NULL 
  AND 
  mt1.meta_key = '_json_file'
) AND ab_posts.post_type = 'listings' AND ((ab_posts.post_status = 'publish'))
                    GROUP BY ab_posts.ID
                    ORDER BY ab_posts.post_date DESC
                    LIMIT 0, 5;

如何加快查询速度?是否应该创建索引来加快查询速度?
UPDATE:下面是两个表的EXPLAIN查询和索引- ab_post_ meta和ab_posts

更新:我想我找到了源代码。查询是由WordPress核心文件wp-includes\class-wp-query.php生成的

$found_rows = '';
    if ( ! $q['no_found_rows'] && ! empty( $limits ) ) {
        $found_rows = 'SQL_CALC_FOUND_ROWS';
    }

    $old_request = "
        SELECT $found_rows $distinct $fields
        FROM {$wpdb->posts} $join
        WHERE 1=1 $where
        $groupby
        $orderby
        $limits
    ";
tkqqtvp1

tkqqtvp11#

我想我找到了罪魁祸首。答案是解释here
我有一个如下的 meta_query。

$args = array(
    'posts_per_page' => MAX_LIMIT,  
    'post_type' => listings',
    'orderby' => 'date',
    'order' => 'desc',  
    'post_status'=>'publish',
    'meta_query' => array(
        'relation' => 'AND',
            array(
                'key' => 'cid',
                'compare' => 'NOT EXISTS'
            ),
            array(
                'key' => '_json_file',
                'compare' => 'EXISTS'
            )
    ));

相关问题