在大型数据库上使用META_QUERY进行非常慢的查询

时间:2014-04-12 作者:quyet

我有一个博客,有大约20万篇帖子,每个帖子都有20个自定义字段。

我一直在用WordPressTransients_API 缓存查询,在少数情况下可以使用它,但由于博客的性质,它不能用于其他一些查询。

我的博客是http://fixapk.com

访问应用程序时出现问题(single.php).

我使用自定义字段*\'\\u similar\\u apps\'*检索相关文章的代码如下:

$args = array(
  \'showposts\' => 10,
  \'post_type\' => \'post\',
  \'meta_query\' => array(
    \'relation\' => \'OR\',
     array(
       \'key\' => \'_similar_apps\',
       \'value\' => $mainlink,
       \'compare\' => \'LIKE\'
     ),
   ),
);
$q = new WP_Query( $args );

if ( $q->have_posts() ) : while( $q->have_posts() ): $q->the_post();
  // Do something....
但速度很慢。

您可以访问以下链接打开一篇文章并查看其速度

http://fixapk.com/chrome-samsung-support-library/

。。。加载大约需要6-10秒。

那么,如何使用meta_query?

非常感谢!

1 个回复
SO网友:Douglas.Sesar

建议坚持使用WP\\u query来抓取Wordpress帖子;但是,您可以直接从Posteta表构建自己的查询,然后遍历结果。

根据查询的不同,这可能更快(不经常;Wordpress努力使其数据库查询尽可能快)。

global $wpdb;
$table = $wpdb->prefix . \'the_table_you_want\';
$sql = $wpdb->prepare( \'SELECT id FROM \' . $table . \' WHERE some_field = %s AND another_field = %d;\', \'some_value\', 42 );
$results = $wpdb->get_results( $sql );

foreach( $results as $result ):

    //do stuff with $result ( it is an object, not an array )       

endforeach;
在构造自己的查询时始终使用prepare。

结束

相关推荐