Estoy tratando de encontrar la intersección (conjunto) entre dos columnas en la misma tabla en MySQL. Básicamente quiero buscar las filas que tienen ya sea un elemento decol1 que está en col2 de la tabla, o un elemento decol2 que está en col1 de la tabla.Encontrar la intersección entre dos columnas
principio me trataron:
SELECT * FROM table WHERE col1 IN (SELECT col2 FROM table)
que era sintácticamente válida, sin embargo, el tiempo de ejecución es demasiado alta. El número de filas en la tabla es ~ 300,000 y las dos columnas en cuestión son no indexadas. Supongo que el tiempo de ejecución es n^2 o n^3 dependiendo de si MySQL ejecuta la subconsulta de nuevo para cada elemento de la tabla o si almacena temporalmente el resultado de la subconsulta.
Luego pensé en tomar la unión de las dos columnas y eliminar elementos distintos, porque si un elemento aparece más de una vez en esta unión, entonces debe haber estado presente en ambas columnas (suponiendo que ambas columnas contengan solo elementos distintos) .
¿Existe alguna manera más elegante (es decir, más rápida) de encontrar la intersección establecida entre dos columnas de la misma tabla?
nunca use 'Select X de la tabla donde Coly IN (SELECT ...)' El IN (consulta 'SELECT' es lento como el infierno en MySQL, siempre use una combinación interna como se muestra en @joe. – Johan