使用大型元查询选择或POST__IN时查询速度较慢

时间:2017-02-14 作者:Berend

目前的情况是一家拥有3000多种产品的WooCommerce商店。该店仅限会员(5000+),会员可以使用有限的产品。查询特定于用户的产品ID是一个巨大的性能瓶颈。

Attempt 1 (查询需要22秒)
在元值中搜索附加到产品的成员列表:

\'meta_query\' => array(
    array(
        \'key\' => \'product-members\',
        \'value\' => \':"\' . $member_id . \'";\',
        \'compare\' => \'LIKE\',
    ),
),
Attempt 2 (查询需要17秒)
缓存允许用户查看的产品ID列表,然后使用以下各项执行所有产品查询:

\'post__in\' => $post_ids,
如果没有成员特定性,查询需要150ms……我还可以用什么其他方法来避免这种性能影响?如何以不同的方式保存产品/成员关系,以便于查询?

1 个回复
SO网友:flomei

根据成员表和产品表是否经常更改MySQL Query Cache 对你来说可能是一个有趣的功能。

一旦查询被处理,它就会缓存查询的结果集,并在一段时间内从缓存中传递它们。如果表的更改频率较低,则可以将刷新时间设置为更长的时间跨度,这样您可以从缓存结果中获得更长的好处。

然后可以通过从Cronjob或其他东西触发的脚本来刷新缓存。我使用类似的方法来创建网站的全页缓存版本,并且仅每隔一小时左右刷新缓存。

StackOverflow在这个主题上也有一些有趣的问题。您可以从这里开始:PHP Best way to cache MySQL results?