如何优化重复搜索查询

时间:2021-05-12 16:12:44

标签: mysql

我有一个包含大约 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。

我正在寻找提示/想法来帮助提高性能并使查询具有合理的功能。

2 个答案:

答案 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- 有多少重复项