我有一个包含大约 40 万条记录的表,我需要对其进行重复数据删除。我不会删除记录——我需要识别潜在的重复项并返回它们以供进一步分析。该表有四列:id、first_name、last_name、postal_code——我匹配 first_name、last_name 和 postal_code。 id 列是主键,其他三列有索引。我的查询是:
SELECT t1.id id1, t2.id id2, 3 weight
FROM dupe_table t1
JOIN dupe_table t2
ON t1.first_name = t2.first_name
AND t1.last_name = t2.last_name
AND t1.postal_code = t2.postal_code
WHERE t1.id < t2.id
这是非常标准的,我以前也做过类似的查询。但是我发现这个查询需要很长时间才能完成并返回记录(我没有让它运行完成,但它需要超过 10 分钟)。当我对其运行 EXPLAIN 时,t1 没有使用任何键——它正在运行全表扫描,而 last_name 索引用于 t2。
我正在寻找提示/想法来帮助提高性能并使查询具有合理的功能。
答案 0 :(得分:0)
添加此项将加快查询速度:
GetVolumeInformation(..., &volumeName[0], ..., &fileSystemName[0], ...);
答案 1 :(得分:0)
我不会删除记录——我需要确定潜在的 重复并返回它们以供进一步分析。
试试这个
SELECT
GROUP_CONCAT(`id`) as entries,
COUNT(*) c,
CONCAT(
`first_name`,
"|",
`last_name`,
"|",
`postal_code`
) AS title
FROM
dupe_table
GROUP BY
title
HAVING
c > 1
“条目”将包含所有条目 - 第一个是原始条目,其余是重复项和 c- 有多少重复项