У меня небольшая проблема с производительностью MySQL-запроса, и я не знаю, как его правильно построить, поэтому он работает с минимальными усилиями.
Проблема:
Представьте себе таблицу с двумя столбцами: user (int), item (int)
Пользователи имеют разные элементы, связанные с. Возможно, у пользователя-1 есть элемент-1, элемент-2, элемент-3, а у пользователя-2 - элемент-1, элемент-3, элемент-4.
То, что я хочу знать, относится к определенному пользователю X и каждому элементу отдельно, если хотя бы у одного пользователя есть эти элементы.
То, с чего я начал, было
SELECT item
FROM table
WHERE item IN (SELECT item FROM table WHERE user = X) AND user != X
GROUP BY item
... но это было неэффективно, потому что в этом случае запрос просматривает всю таблицу и проверяет каждый элемент, даже если он уже найден.
Я не могу ограничить запрос, потому что я не знаю, сколько элементов на самом деле есть у user-X.
И отправка поискового запроса с LIMTI 1 для каждого элемента в отдельности также не очень хорошая идея.
В качестве абстракции вы также можете сказать, что я хочу знать, связан ли набор item-X, ..., item-Y (не порядковая или непрерывная нумерация) хотя бы с одним пользователем.
Меня не волнует, как часто предмет рядом, просто хочу узнать, хотя бы один раз.
Итак, как это можно сделать правильно?
Спасибо за любые предложения!