我在要检查的数据库中有几个重复项,所以我做了什么来查看哪些是重复项,我这样做了:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
这样,我将获得所有相关字段出现不止一次的行。此查询需要几毫秒才能执行。
现在,我想检查每个重复项,所以我想我可以在上面查询中使用相关字段选择 some_table 中的每一行,所以我这样做了:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
由于某种原因,这变得非常缓慢(需要几分钟)。这里到底发生了什么让它这么慢?相关字段已编入索引。
最终,我尝试从第一个查询创建一个视图“temp_view” (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
,然后像这样进行第二个查询:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
这很好用。MySQL 在几毫秒内完成此操作。
这里有任何 SQL 专家可以解释发生了什么吗?