我在一个数据库里找到了几个副本,我想检查一下,所以我做了这样的检查,看哪些是副本:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
通过这种方式,我将获得所有发生一次以上的 relevant _ field 行。
现在,我想检查每个重复项,所以我认为我可以用上面查询中的 relevant _ field 对 some _ table 中的每一行进行 SELECT,所以我这样做了:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
由于某种原因,这个过程变得极其缓慢(需要几分钟)。到底发生了什么事让它变得这么慢?Relevant _ field 是索引的。
最后,我尝试从第一个查询 (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
创建一个视图“ temp _ view”,然后像下面这样创建第二个查询:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
MySQL 可以在几毫秒内完成这项工作。
这里有没有 SQL 专家能解释一下发生了什么?