代码之家  ›  专栏  ›  技术社区  ›  Mintendo

数据库架构用户匹配

  •  0
  • Mintendo  · 技术社区  · 7 年前

    在这两种模式中,关于用户匹配的解决方案哪一种对于大数据是最好的?

    解决方案1:

    CREATE TABLE `user_matches` (
      `user_id_1` int(11) NOT NULL,
      `user_id_2` int(11) NOT NULL,
      `like_user_1` tinyint(1) DEFAULT '0',
      `like_user_2` tinyint(1) DEFAULT '0',
      PRIMARY KEY (`user_id_1`,`user_id_2`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    要选择两个用户之间的匹配,我应该编写以下查询:

    SELECT * 
    FROM user_matches
    WHERE (user_id_1 = 123 OR user_id_2 = 123) AND (like_user_1 = 1 AND like_user_2 = 1)
    

    注:假设like_user_1和like_user_2都被索引

    解决方案2:

    CREATE TABLE `user_matches` (
      `user_id` int(11) NOT NULL,
      `user_id_liked` int(11) NOT NULL,
      PRIMARY KEY (`user_id`,`user_id_liked`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    要选择用户之间的匹配,我应该编写以下查询:

        SELECT me.user_id_liked
        FROM user_matches me
        INNER JOIN user_matches you ON me.user_id = you.user_id_liked 
                                    AND you.user_id = me.user_id_liked 
                                    AND me.user_id = 123
    

    我认为第二个解决方案对于模式和查询来说是最好的,因为from和joins子句在where子句之前执行,但是在第一个解决方案中,我不需要连接表。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Fran Cerezo    7 年前

    如果您在解决方案1查询中索引like_user_1和like_user_2,应该很快。

    我将测试这两个解决方案并比较执行计划。 解释和解释扩展将是有用的。