Pregunta de etiquetado MySQL: ¿cómo seleccionar un elemento que ha sido etiquetado como X, Y y Z?

Estoy tratando con una base de datos donde los elementos están "etiquetados" un cierto número de veces.

articulo (100k filas)

carné de identidadnombreotras cosas

etiqueta (10k filas)

carné de identidadnombre

item2tag (1,000,000 filas)

Identificación del artículotag_idcontar

Estoy buscando la solución más rápida para:

¿Seleccionar elementos que han sido etiquetados como X, Y y Z (donde X, Y y Z corresponden a (posiblemente) nombres de etiquetas)?

Esto es lo que tengo hasta ahora ... Me gustaría asegurarme de que lo estoy haciendo de la mejor manera posible:

Primero obtenga los tag_ids de los nombres:

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

Luego me agrupo por esos tag_ids y uso Tener que filtrar el 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;

Entonces solo puedo seleccionar un elemento con esos identificadores.

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

Tengo millones de filas en item2tag, con un índice en (item_id, tag_id). ¿Será esta la solución más rápida?

Respuestas a la pregunta(3)

Su respuesta a la pregunta