Я пытаюсь найти (заданное) пересечение между двумя столбцами в одной таблице в MySQL. Я в основном хочу найти строки, которые имеют либо элемент col1 , который находится в таблице col2 , либо элемент col2 , который находится в таблице col1 .
Сначала я попробовал:
SELECT * FROM table WHERE col1 IN (SELECT col2 FROM table)
, что было синтаксически корректно, однако время выполнения слишком велико. Количество строк в таблице составляет ~ 300 000, и два рассматриваемых столбца не проиндексированы . Я предполагаю, что время выполнения равно n ^ 2 или n ^ 3 в зависимости от того, выполняет ли MySQL подзапрос снова для каждого элемента таблицы или временно сохраняет результат подзапроса.
Затем я подумал о том, чтобы взять объединение двух столбцов и удалить отдельные элементы, потому что если элемент появляется более одного раза в этом объединении, то он должен присутствовать в обоих столбцах (при условии, что оба столбца содержат только отдельные элементы).
Есть ли более элегантный (то есть более быстрый) способ найти пересечение множеств между двумя столбцами одной и той же таблицы?