我試圖找到MySQL中同一個表中兩列之間的交集。基本上,我想找到有一張COL1元素是表中的COL2,或COL2元素是表中的COL1行。查找兩列之間的交點
起初我想:
SELECT * FROM table WHERE col1 IN (SELECT col2 FROM table)
這是語法上有效,但在運行時是高得離譜。表中的行數是〜300,000,所涉及的兩列是未編入索引。我假設運行時間爲n^2或n^3,具體取決於MySQL是否爲表的每個元素再次執行子查詢,或者是否暫時存儲子查詢的結果。
接下來我想到了兩列的聯合並刪除不同的元素,因爲如果一個元素在這個聯合中出現不止一次,那麼它必須出現在兩列中(假設兩列只包含不同的元素) 。
是否有更優雅(即更快)的方式來查找同一個表的兩列之間的集交集?在col1
和col2
從未使用'SELECT X FROM表,其中科利IN(SELECT ...)''的IN(SELECT'查詢是慢如地獄在MySQL中,總是使用內部連接,如@joe所示 – Johan 2011-06-03 21:27:47