数据库模式用户匹配

时间:2018-06-02 09:53:23

标签: mysql sql database

在这两个关于用户匹配的模式解决方案中,对于大数据来说这可能是最好的吗?

解决方案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)

PS:想象一下,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和join子句在where子句之前执行,但在第一个解决方案的同一时间我不需要连接表。

1 个答案:

答案 0 :(得分:1)

我为解决方案1索引like_user_1和like_user_2查询应该很快。

我会测试两种解决方案并比较执行计划。 EXPLAIN和EXPLAIN EXTENDED非常有用。