php - MySQL : For big storage, 我应该使用单个重列还是包含数千行的表?

标签 php mysql regex optimization load

我为一个网站构建了一个类似的系统,但我陷入了困境。

我有一个表,其中存储了所有可以点赞的项目。称之为“项目表”。

为了保持服务器的速度,我必须:

  • 在项目表中添加一列。 这意味着每次用户喜欢某个项目时,我都必须在一个字符串内进行搜索(使用 PHP 中的正则表达式),其中注册了所有喜欢该项目的用户的 ID。这是为了验证相关用户之前是否已经喜欢过该项目。在本例中,我在 html 上显示了一个不同的按钮。

Problem > If I have (by chance) 3000 liked on an item, I fear the string to begin very big and heavy to regex each time ther is a like on it...

  • 添加一个特定的新表(LikedBy),并分别记录每个点赞者的ID、项目的名称以及点赞的状态(点赞或不点赞)。

Problem > In this case, I fear for the MySQL server with thousand of rows to analyze each time a new user like one popular item...

服务器版本:5.5.36-cll-lve MySQL Community Server (GPL) by Atomicorp

我应该将负载放在 PHP 脚本还是 MySql 数据库上?什么是性能最高(且可扩展)的?

如果由于某些原因,我的问题没有意义,有人可以告诉我正确的方法吗? 谢谢。

最佳答案

您必须创建另一个表,称为likes_table,其中包含id_user intid_item int,如果您喜欢的话,应该这样做您提出的第一个解决方案您的数据库将不会标准化,您将来将面临太多问题。

要计算类似的数量,您只需

 SELECT COUNT(*) FROM likes_table WHERE id_item='id_item_you_are_looking_for';

要了解谁喜欢什么:

 SELECT id_item FROM likes_table WHERE id_user='id_user_you_are_looking_for';

不需要任何正则表达式,并且您的数据库已经很好地规范化,可以轻松找到数据。您可以告诉 mysql 为 id_userid_item 建立索引,使它们在 likes_table 中唯一,这样您的所有查询都会运行得更快

关于php - MySQL : For big storage, 我应该使用单个重列还是包含数千行的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280963/

相关文章:

regex - 如何使用PowerShell编辑HTML标签?

mysql - 使用字符串作为逗号分隔查询

r - 正则表达式 R 的 IF 过滤器

php - 无法将日期时间从 time() 更改为 NOW ()

php - 使用php将csv文件导入数据库

mysql - 使用带日期的 pdo prepare 和 UNION 不返回任何结果(mysql)

php - 用表格条目加一填充文本框?

java - 使用正则表达式提取子字符串,但如果字符串与正则表达式不匹配则保留它

php - 在sql中添加新行

php - 更改几天前的 Php 日期