在这两个关于用户匹配的模式解决方案中,对于大数据来说这可能是最好的吗?
解决方案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子句之前执行,但在第一个解决方案的同一时间我不需要连接表。
答案 0 :(得分:1)
我为解决方案1索引like_user_1和like_user_2查询应该很快。
我会测试两种解决方案并比较执行计划。 EXPLAIN和EXPLAIN EXTENDED非常有用。