Вопрос с тегами MySQL: как выбрать элемент, помеченный как X, Y и Z?

Я имею дело с базой данных, где элементы «помечены» определенное количество раз.

вещь (100 тыс. Строк)

Я быназваниедругие вещи

тег (10 тыс. Строк)

Я быназвание

item2tag (1 000 000 строк)

item_idtag_idподсчитывать

Я ищу самое быстрое решение для:

Выберите элементы, которые были помечены как X, Y и Z (где X, Y и Z соответствуют (возможно) именам тегов)?

Вот что у меня есть ... Я просто хотел бы убедиться, что я делаю это наилучшим образом:

Сначала получите tag_ids из имен:

SELECT tag.id WHERE name IN ("X","Y","Z");

Затем я группирую по этим tag_ids и использую Фильтровать результат:

SELECT item2tag.*, count(tag_id)
  FROM item2tag
  WHERE tag_id=1 or tag_id=2 or tag_id=3
GROUP BY item_id
HAVING count(tag_id)=3;

Тогда я могу просто выбрать из пункта с этими идентификаторами.

SELECT * FROM item WHERE id IN ([results from prior query])

У меня есть миллионы строк в item2tag, с индексом (item_id, tag_id). Это будет самое быстрое решение?

Ответы на вопрос(3)

Ваш ответ на вопрос