MySQL:对于大容量存储,我应该使用单个重列还是具有数千行的表?

时间:2014-03-09 10:13:26

标签: php mysql regex optimization load

我为一个网站建立了一个类似的系统,我面临两难选择。

我有一张表格,其中存储了所有可以喜欢的项目。称之为“项目表”。

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

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

问题>如果我(偶然)有3000个喜欢的物品,我担心弦乐开始非常大而且很重,每次正如   在它...

  • 添加一个特定的新表(LikedBy)并分别记录每个表格,包括liker的ID,项目的名称和类似的状态(喜欢或不喜欢)。
  

问题>在这种情况下,我担心MySQL服务器有几千行来分析新用户每次像一个热门项目...

服务器版本:Atomicorp的5.5.36-cll-lve MySQL社区服务器(GPL)

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

如果由于某些原因,我的问题没有让人感到有人能告诉我正确的方法吗? THX。

2 个答案:

答案 0 :(得分:0)

您必须创建另一个表格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中成为唯一,这样您的所有查询都可以更快地运行

答案 1 :(得分:0)

使用MySQL,您可以将用户ID和项目ID设置为unique pair。这应该会提高很多性能。

您的表格包含以下两列:item iduser id。每一行都是一样的。