一对多表与3M记录

时间:2014-03-26 14:16:10

标签: mysql database database-design

我在MySQL中有一个包含almsot 300万条记录的表。

该表将朋友信息保存在用户系统中。所以它有很多用户甚至更多的朋友(每个用户最多有2000个(软))。我添加了一些额外的字段 name,url,dob,image,registered ,它们是varchar(255)和日期。
我的基本数据是2个int和1个varchar(6)。

使用PHPMyAdmin时,一切都变得很慢。我有一个关于用户ID和varchar(6)的索引,以及我如何查询用户的所有朋友(进展顺利)。但是,任何其他操作(或未来的操作)都不会很快。

我的选择:

  1. 删除双重数据(规范化)
  2. 更改好友ID的数据类型并将其保存为JSON blob
  3. 所以问题;

    • 当我的桌子只有2个整数和一个微小的varchar时,它仍然是 3M记录缓慢?
    • 我应该更改我的数据类型吗?
    • 我应该 为这个好友列表问题使用不同的模式?

    编辑:澄清一点。

    用户不是我的实际用户,但它们仍然是用户对象。所有朋友都是用户对象,但我可能已经拥有用户对象。因此,我使用好友中的额外数据在“用户”页面的列表中显示有关该数据的数据。

    在理想世界中,事情不会花费这么长时间,在下一个最佳世界中,我只会在朋友中有2个字段user_idfriend_id 。但是我不能依赖于将friend_id链接到User对象,我可能没有它......

    用户(包含更多字段,但为了简洁起见)

    +-------+---------+-------+------------+
    | shard | user_id | name  |    dob     |
    +-------+---------+-------+------------+
    | nl    |       1 | Bob   | 2014-03-26 |
    | nl    |       2 | Erik  | 2014-03-26 |
    | de    |       1 | Johan | 2014-02-01 |
    +-------+---------+-------+------------+
    

    朋友(包含更多字段,请参阅上述说明)

    +-------+---------+-----------+--------+
    | shard | user_id | friend_id |  name  |
    +-------+---------+-----------+--------+
    | nl    |       1 |         2 | Erik   |
    | nl    |       1 |         3 | Alice  |
    | de    |       1 |         2 | Rasmus |
    +-------+---------+-----------+--------+
    

    nl-Bob是nl-Erik的朋友(是用户)
    nl-Bob是nl-Alice的朋友(用户)
    de-Johan是de Rasmus的朋友(用户)

0 个答案:

没有答案