WordPress和MySQL,在META_QUERY中使用多个数组的问题

时间:2011-07-16 作者:Morteza

我使用此代码显示自定义帖子:

$args = array(
    \'category__in\' => $bookcat,
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(\'key\' => \'bookname\',\'compare\' => \'LIKE\',\'value\' => $bookname),
        array(\'key\' => \'authr\',\'compare\' => \'LIKE\',\'value\' => $authr),
        array(\'key\' => \'translator\',\'compare\' => \'LIKE\',\'value\' => $translator),
        array(\'key\' => \'publisher\',\'compare\' => \'LIKE\',\'value\' => $publisher),
        array(\'key\' => \'pyear\',\'compare\' => \'=\',\'value\' => $pyear,\'type\' => \'NUMERIC\'),
        array(\'key\' => \'ptime\',\'compare\' => \'=\',\'value\' => $ptime,\'type\' => \'NUMERIC\')
        )
    );
meta\\u查询中有6个数组,当我使用该代码时,mysql服务器使用了超过80%的cpu!但当我使用4个或更少的数组时,效果很好。例如:

    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(\'key\' => \'bookname\',\'compare\' => \'LIKE\',\'value\' => $bookname),
        array(\'key\' => \'authr\',\'compare\' => \'LIKE\',\'value\' => $authr),
        array(\'key\' => \'translator\',\'compare\' => \'LIKE\',\'value\' => $translator),
        array(\'key\' => \'publisher\',\'compare\' => \'LIKE\',\'value\' => $publisher)
        )
wordpress meta\\u查询中使用数组的数量是否有限制?还是我的密码有误?谢谢你的帮助。

2 个回复
最合适的回答,由SO网友:Scott 整理而成

看看你的代码,它看起来非常好。尽管您的查询越复杂,它所需的资源就越多,所需的时间也就越长。您提到您的CPU使用率上升到80%,这是正常的,但使用率保持在80%有多长时间?如果是很短的一段时间,那么我就不会担心了。

如何优化查询。。。您可以考虑将数据放在一个单独的DB表中,在该表中可以适当地索引该表,以适应您将要抛出的查询。然而,这样做需要相当多的开发工作才能完成。如果你想沿着这条路走下去,那么可以在这里问其他问题来开始你的学习。

SO网友:Vincent Mimoun-Prat

我也有同样的问题。问题是为每个数组生成一个内部联接。在许多情况下,这是不必要的。我已经向core提交了一个补丁。

另请参见:WordPress Core - Optimizing meta_query generated SQL?

结束

相关推荐

在WordPress页面中使用从MySQL表中提取的动态数据

我想从mySQL数据库中提取数据,并将其放在WP页面的一些表中。我正在使用WP 3.1.1。假设我有一个销售数据表,我想从mySQL数据库中提取这些数据,然后将它们显示在WordPress页面的一个表中。我只知道足够的php来建立db连接、提取数据并将其回送出来。但是,我不确定与WordPress结合使用的最佳方式是什么。a) 我可以把我的表放在WordPress数据库中吗?(这样我就可以使用WP的数据库连接)。他们会引起某种冲突吗?当我升级WP时,它们会被重写吗?b) 我应该把php代码放在哪里?当我创