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