Wpdb&get_row和wp_Query&ge_post_meta哪个更快?

时间:2022-01-23 作者:Amenadiel

我计划制作一个私有api,我想知道我应该使用哪个api来处理我的数据。

  1. wpdb & get_row with my custom sql
  2. regular wp_query & get_post_meta()
我想知道是否最好创建一个自定义表&;已使用wpdb/get\\u行或仅使用创建自定义帖子类型(&U);改为发布meta。

我是这方面的新手,所以我想知道两个中哪一个会更快??

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

您应该始终使用get_post_meta. 尝试使用原始SQL查询进行微观优化将降低而不是提高性能。

当您获取帖子时,WordPress会出于性能原因批量获取其meta,因此如果您使用get_post_meta 答案应该已经存在于记忆中了。如果你的站点有一个对象缓存,那么它也会从以前的请求中记住它。

然而,如果您使用原始SQL,不算WordPress本身也使用SQL,那么您将不得不等待大量的小型数据库查询,即使WordPress已经知道该元数据的价值。

您还将引入插件兼容性问题,因为没有任何过滤器get_post_meta 运行将可用,一些插件短路这些值或操纵它们来实现功能。

如果你想建立自己的表格,要知道你将放弃WordPress的所有优化,而且不能保证它会更快。拥有一个自定义表并不能使事情变得更快,除非它正确地设计了适当的索引,以便快速处理特定类型的查询。你可能会发现这张桌子实际上速度较慢。

一般来说,大多数WP开发人员都没有意识到对性能有重大影响的关键信息是,post元表经过优化,可以在您已经知道post ID/键的情况下查找值。它在搜索和过滤方面非常差,也就是说,查找所有具有该值的关键字或没有该值的帖子。这就是分类法存在的原因,也是标记/类别不存储为post meta的原因。分类表针对查找/筛选/搜索帖子进行了优化。

如果你发现自己需要meta_query 在您的WP_Query 参数然后考虑将这些值更改为自定义分类法和术语meta_query 可能会非常慢,并且随着post元表的增大,其性能会迅速下降。

相关推荐

$wpdb->get_row返回什么?

由于插件中的调试和错误查找,我有一个简短的问题。$wpdb->;如果没有结果,返回get\\u row()?文件说明:(array|object|null|void) Database query result in format specified by $output or null on failure. 但当查看源代码时,它似乎返回了;null“;。。。如果您能快速提供帮助,我将不胜感激,我一直认为它会返回一个空数组,但我可能弄错了!