Поиск пересечения двух столбцов

Я пытаюсь найти (заданное) пересечение между двумя столбцами в одной таблице в MySQL. Я в основном хочу найти строки, которые имеют либо элемент col1 , который находится в таблице col2 , либо элемент col2 , который находится в таблице col1 .

Сначала я попробовал:

SELECT * FROM table WHERE col1 IN (SELECT col2 FROM table)

, что было синтаксически корректно, однако время выполнения слишком велико. Количество строк в таблице составляет ~ 300 000, и два рассматриваемых столбца не проиндексированы . Я предполагаю, что время выполнения равно n ^ 2 или n ^ 3 в зависимости от того, выполняет ли MySQL подзапрос снова для каждого элемента таблицы или временно сохраняет результат подзапроса.

Затем я подумал о том, чтобы взять объединение двух столбцов и удалить отдельные элементы, потому что если элемент появляется более одного раза в этом объединении, то он должен присутствовать в обоих столбцах (при условии, что оба столбца содержат только отдельные элементы).

Есть ли более элегантный (то есть более быстрый) способ найти пересечение множеств между двумя столбцами одной и той же таблицы?

5
задан alott 3 June 2011 в 20:01
поделиться