Pergunta de codificação do MySQL: como selecionar um item que foi marcado como X, Y e Z?

Estou lidando com um banco de dados onde os itens são "marcados" um certo número de vezes.

item (100 mil linhas)

Eu irianomeoutras coisas

etiqueta, rótulo, palavra-chave (10 mil linhas)

Eu irianome

item2tag (1.000.000 de linhas)

item_idtag_idcontagem

Estou procurando a solução mais rápida para:

Selecione os itens que foram marcados como X, Y e Z (onde X, Y e Z correspondem a nomes de marcas (possivelmente))?

Aqui está o que eu tenho até agora ... Gostaria apenas de ter certeza de que estou fazendo da melhor maneira possível:

Primeiro obtenha os tag_ids dos nomes:

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

Então eu agrupo por esses tag_ids e uso Ter para filtrar o resultado:

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;

Então eu posso apenas selecionar um item com esses IDs.

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

Eu tenho milhões de linhas no item2tag, com um índice em (item_id, tag_id). Essa será a solução mais rápida?

questionAnswers(3)

yourAnswerToTheQuestion