哪一个更有效率?使用usermeta,还是创建新的MySQL表?

时间:2017-10-27 作者:Swen

我正在构建一个书签功能,允许用户在博客帖子中放置一个标记。然后,数据将保存在数据库中,并在打开该博客文章时检索。

在WordPress中,同样的概念可以应用于很多事情,比如帖子评级、帖子偏好等。到目前为止,我一直在为这些功能创建新的MySQL表(方法2),但现在我在猜测自己。

两种方法:

1。使用本机wp_usermeta

这需要序列化帖子ID和标记位置的列表,然后将它们存储在wp_usermeta 表作为字符串。使用此方法似乎最简单,但我不确定这会如何影响wp_usermeta 桌子特别是考虑到序列化数据可能会很大。

2。使用此选项创建一个新表,我不必序列化数据,但每个新标记都会得到自己的行,其中必须包含user\\u id、post\\u id,可能还有一个时间戳。

什么是最有效的方法

考虑到性能、可扩展性、兼容性和易用性,我想知道这些方法中哪种是首选方法。或者也许有比这两种更好的方法?

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

规范化数据更为有效,并且将序列化数据存储在希望在DB级别搜索/处理的表字段中,这对于MySQL/MariaDB等非Nosql RDBMS来说是不合适的。搜索这些字段效率很低,您不能在其上使用索引,也不能加入其中,而且开发imho通常很痛苦。如果您已将该数据存储在PHP序列化blob中,则必须加载每一行以检查它,因为数据库无法为您完成这项工作(或者编写非常难看的regexp,如果有人想向该字段添加其他数据,这可能会爆炸)。

这就是说,除非您拥有大量数据,否则您可能不会在简单查询的挂钟时间内“感觉到”效率低下,而且使用用户元字段可能更容易,这取决于您的开发人员(或交付后负责它的人员)对数据库的经验如何。

结束

相关推荐

MySQL variable in query

当我需要显示每笔交易的运行余额时,我有租户门户。这是我写的查询,它完成了我需要它做的事情。我的问题是它在Wordpress中不起作用。这是我的代码:if (is_user_logged_in()) { $user = wp_get_current_user(); $balance = $wpdb->query( $wpdb->prepare( set @csum := \"SELECT current_balance FROM exp_ten WHE