您应该始终使用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元表的增大,其性能会迅速下降。