【发布时间】:2016-12-06 01:55:36
【问题描述】:
我试图在 MySQL 的同一个表中找到两列之间的(集合)交集。我基本上想找到在表的 col2 中具有 col1 元素或在表的 col2 元素中的行col1。
最初我尝试过:
SELECT * FROM table WHERE col1 IN (SELECT col2 FROM table)
这在语法上是有效的,但是运行时间太长了。表中的行数约为 300,000,有问题的两列未编入索引。我假设运行时间是 n^2 或 n^3,这取决于 MySQL 是否为表的每个元素再次执行子查询,或者是否临时存储子查询的结果。
接下来,我想到了合并两列并删除不同的元素,因为如果一个元素在此联合中出现多次,那么它一定存在于两列中(假设两列都只包含不同的元素)。
有没有更优雅(即更快)的方法来查找同一张表的两列之间的集合交集?
【问题讨论】:
-
永远不要使用
SELECT X FROM TABLE WHERE COLy IN (SELECT ...)IN (SELECT查询在 MySQL 中非常慢,始终使用 @joe 所示的内连接。