[英]Database schema User Matching
在這兩種方案中,關於用戶匹配的解決方案對於大數據而言可能是最好的?
解決方案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和joins子句在where子句之前執行,但是在第一種解決方案中,我不需要同時連接表。
我在解決方案1查詢中索引like_user_1和like_user_2應該很快。
我將測試兩個解決方案並比較執行計划。 EXPLAIN和EXPLAIN EXTENDED將很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.