Если человеку 1 не понравился человек 2, нет необходимости показывать человека 1 человеку 2. Даже если вы покажете его, они никогда не совпадут.Поэтому ваши расчеты 1K x 1K = 1M немного завышены.
Однако, если вы все еще хотите иметь наборы лайков / дислайков для обоих пользователей, вы можете рассмотреть эту ужасную идею «сжатия» строк.
Представьте, что у вас есть последовательность, подобная этой:
| Person 1 | Person 2 | Op |
| -------- | -------- | --------- |
| 0001 | 1010 | Dislike |
| 0001 | 1011 | Dislike |
| 0001 | 1012 | Dislike |
| 0001 | 1013 | Dislike |
| 0001 | 1015 | Like |
| 0001 | 1017 | Dislike |
| 0001 | 1018 | Dislike |
| 0001 | 1019 | Dislike |
| 0001 | 1021 | Like |
Если у вас есть идентификаторы, следующие друг за другом, вы можете показать их как
| Person 1 | Person 2 | Op | N |
| -------- | -------- | --------- | ---- |
| 0001 | 1010 | Dislike | 3 |
| 0001 | 1015 | Like | 0 |
| 0001 | 1017 | Dislike | 2 |
| 0001 | 1021 | Like | 0 |
, где N - максимальный идентификатор в последовательности(напр. 1010 + 3 = 1013).Если вы определите N как неподписанный tinyint, то максимально возможный размер последовательности может составить 255, то есть теоретически 255 последовательных дислайков / лайков можно сохранить как 1 запись.
И запрос будет чем-товот так (представьте, что вы ищете идентификатор 1013):
SELECT a.*
FROM (
SELECT *
FROM `table`
WHERE person_1 = 0001
AND person_2 >= (1013 - 255) -- 255 is a max size of a sequense
AND person_2 <= 1013
) a
WHERE a.person_2 <= 1013 AND a.person_2 + N >= 1013
Подвыбор ограничит диапазон возможных записей, тогда основной выбор будет соответствовать записи, если она существует.В этом случае это будет
| Person 1 | Person 2 | Op | N |
| -------- | -------- | --------- | ---- |
| 0001 | 1010 | Dislike | 3 |
Но лично я бы пошел с этим и предпочел бы ваше текущее решение из-за его простоты.
ИЛИ как другой вариант, вы можете сжатьстол таким образом
| Person 1 | Person 2 | Max Person 2 | Op |
| -------- | -------- | ------------ | --------- |
| 0001 | 1010 | 1013 | Dislike |
| 0001 | 1015 | 1015 | Like |
| 0001 | 1017 | 1019 | Dislike |
| 0001 | 1021 | 1021 | Like |