【问题标题】:Wordpress meta vs taxonomy queryWordpress 元与分类查询
【发布时间】:2017-09-28 07:54:52
【问题描述】:

通常在制作 Wordpress 网站时,我仅将帖子元用于扩展自定义帖子,并将自定义分类法用于基本查询。我理解为什么这是使用每一个的正确方法,meta 比税收等贵,但我在 WP 中从来没有真正有超出这个范围的项目。然而,我正在研究我自己的一个想法,我需要它从一开始就运行得绝对完美和优化。我花了几个小时试图弄清楚这一点,所以来这里征求第二意见。

我有一个用于产品的帖子类型和另一个用于接受此产品的服务的帖子类型。因此,假设一个产品是 20cm x 30cm x 10cm,我想匹配将携带该产品的所有服务。

我添加了 3 个元字段高度、宽度和深度。然后我到了查询第二个帖子类型的阶段,并决定通过帖子元值查询可能是错误的方法?这是一个例子。

'meta_query'=> array(
        'relation' => 'AND',
        array(
            'key' => '_target_width',
            'compare' => '>=',
            'value' => get_post_meta( get_the_ID(), '_product_width', true ),
            'type' => 'numeric'

        ),
        array(
            'key' => '_target_height',
            'compare' => '>=',
            'value' => get_post_meta( get_the_ID(), '_product_height', true ),
            'type' => 'numeric'

        ),

这样好吗?我有我的疑虑,并且一直在想我真的需要使用分类法,因为我不确定对可能是大量数据的内容运行元查询。

所以我的问题是您将如何进行设置?如果税收,那么我将如何为具有自定义分类的查询设置键值对?还是我坚持以上?

我可能会写得更短一些,但会尽可能详细地解释。

【问题讨论】:

  • 我忘了补充。 _target_width & height 等也是元字段。

标签: mysql wordpress


【解决方案1】:

元查询可能是最简单的解决方案,但在性能方面并不是最佳的。如果您的 postspostmeta 表增长,此查询可能会变得非常缓慢。这是因为对于您创建的每个条件,数据库查询都必须对 postmeta 表进行新的左连接(以将该字段的数据作为查询中的单独列加载),并且对于大型表,这可能会变慢. 我在尝试在具有多种不同条件的大型数据库中查询用户元数据时学到了这一点。 至于使用分类法 - 我认为这种特殊情况的性能类似于后元查询。

因此,如果性能优先,我建议为服务目标创建一个单独的数据库表,其中包含以下列:

service_id -> foreign key to the service's post ID
target_width
target_height
target_depth

这样做的缺点是您将无法使用默认的 WordPress 帖子查询方法来加载帖子或存储目标大小,但您必须为此创建自定义数据库查询,因此这需要一些使用mysql的经验。

如果您选择此选项,您仍然可以将帖子元用于产品帖子,除非您必须按这些字段查询帖子(就像您必须处理服务帖子一样)。

所以,这肯定需要更多的工作,但这个解决方案在性能方面应该会更好。

但是,如果您无法选择创建单独的数据库表,并且您需要在使用后元数据和分类法之间进行选择,则需要考虑以下事项:

  • 对您的 postmeta 表将增长多少做出一些预测 - 许多插件倾向于将大量数据存储为 post meta,因此如果是这种情况,如果表更小,加载分类法可能会更快李>
  • 使用分类法不会像 post meta 那样灵活,因为您需要创建所有可能的大小作为术语。另外我不认为 WordPress 提供了一个功能来运行像 >= 这样的带有分类的查询,所以你仍然需要创建自定义数据库查询来加载帖子
  • 找出哪一个性能更好的最佳方法是创建一个包含大量虚拟数据的数据库,然后对这两个查询运行一些基准测试以找出哪一个性能更好。请记住,不同的查询会根据 MySQL 版本执行不同的操作。

我希望这会有所帮助!

【讨论】:

  • 感谢 Ben,经过多次辩论后,我决定使用标准查询元并密切关注性能。事后看来,我不应该在 Wordpress 中做这个,但我正在考虑如果我来销售等,我会考虑在未来对其进行校对 :)
猜你喜欢
  • 2020-04-19
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
相关资源
最近更新 更多