簡體   English   中英

數據庫模式用戶匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM