Среди этих двух схем решения о сопоставлении пользователей, которые могут быть наилучшими для больших данных?
Решение 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
Я думаю, что 2-е решение является лучшим для схемы и для запросов, потому что предложения from и join выполняются перед предложением where, но в предложениито же самое время в первом решении мне не нужно объединять таблицы.