php - 导入10万条数据,数据库里有100万条数据,如何判断重复?

查看:595
本文介绍了php - 导入10万条数据,数据库里有100万条数据,如何判断重复?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

具体需求

  1. 数据库里存在100万条数据;

  2. 要导入10万条数据;

  3. 如果要导入的数据在数据表里存在,则终止数据导入;

疑问

如何在每条数据需要对比的情况下快速导入,同时导入失败进行数据回滚?

解决方案

假定目标表叫做 target(100万数据), 需要导入的表叫做 source(10万数据)。
本例很大的一部分时间消耗在于判断是否两张表中的记录一样,猜测楼主想要 所有字段都相同(除了id字段)才认定为是同一条记录。

给每条记录计算一个类Hash值,可以存在target和source新建的字段中(hashValue), 计算量是 110万。
然后使用以下语句导入数据

IF EXISTS(
    SELECT TOP 1 1
      FROM source a
      INNER JOIN target b
    ON a.hashValue = b.hashValue
) BEGIN

  -- 返回重复记录
    SELECT a.*
      FROM source a
      INNER JOIN target b
    ON a.hashValue = b.hashValue

END
ELSE 
BEGIN
    INSERT INTO Target(filed1, field2, field3, field4 ... hashValue)
    SELECT
      t.filed1,
      t.field2,
      t.field3,
      t.field4, ..., t.hashValue
    FROM target t
END

这篇关于php - 导入10万条数据,数据库里有100万条数据,如何判断重复?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆