【问题标题】:Speed up slow WordPress query加快缓慢的 WordPress 查询
【发布时间】:2019-02-08 15:41:30
【问题描述】:

我使用插件 WP Job Manager 为我的网站编写了一个自定义的相关空缺查询。使用查询监视器时,我一直认为查询非常慢(5 秒以上)。

我已经实现了查询缓存,但这需要查询至少运行 1 次。

是否可以进一步加快这样的查询速度?

    $location = get_post_meta($id, '_job_location', true);
    $category = get_post_meta($id, 'job_category_wo', true);
    $args = array(
    'post_type'  => 'job_listing',
    'numberposts' => 5,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => '_job_location',
            'value'   => $location,
            'compare' => '='
        ),
        array(
            'relation' => 'AND',
            array(
                'key'     => '_job_location',
                'value'   => $location,
                'compare' => '='
            ),
            array(
                'key'     => 'job_category_wo',
                'value'   => $category[0],
                'compare' => 'LIKE'
            )
        )
    )
);
$postslist = get_posts( $args );

【问题讨论】:

    标签: mysql wordpress performance


    【解决方案1】:

    在您展示的示例中,您搜索符合此条件的帖子:

    _job_location = $region OR _job_location = $region AND job_category_wo LIKE $category[0]
    

    您可以将此表达式简化为:

    _job_location = $region
    

    布尔代数说(A) OR (A AND B) 是多余的。与简单的(A) 相同。

    这会排除OR 操作,这对于 SQL 来说很难优化。

    P.S.:我认为您的示例中还有其他错误。您设置了一个变量$location,但后来您使用了$region。它是哪一个?

    此外,您没有清理任何值以防止 SQL 注入。

    【讨论】:

    • 排除“或”运算可以带来巨大的改进,谢谢!如果我仍然没有足够的相关空缺,那么我可以使用更简单的查询来添加它们。此时看起来 2 个查询优于 1 个。
    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多