php - 导入10万条数据,数据库里有100万条数据,如何判断重复?
PHP中文网
PHP中文网 2017-05-16 13:09:47
0
4
738

具体需求

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

  2. 要导入10万条数据;

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

疑问

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

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(4)
phpcn_u1582

Supposons que la table cible s'appelle cible (1 million de données) et que la table à importer s'appelle source (100 000 données).
Une grande partie du temps consacré à cet exemple consiste à déterminer si les enregistrements des deux tables sont identiques. Je suppose que l'auteur souhaite que tous les champs soient identiques (sauf le champ id) avant d'être considérés comme tels. le même disque.

Calculez une valeur de type hachage pour chaque enregistrement, qui peut être stockée dans les champs cible et source nouvellement créés (hashValue). Le montant du calcul est de 1,1 million.
Utilisez ensuite l'instruction suivante pour importer les données

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
我想大声告诉你

Si vous considérez l'efficacité des transactions, elle ne doit pas être élevée

Veuillez vous référer ci-dessous pour des idées personnelles :

1. Déterminez d’abord si les données à insérer existent

sélectionnez l'identifiant dans la table où id in('k1,k2,k3');

2. N'existe pas. Écrivez SQL dans la base de données

.

10w données, 1 sql, vitesse d'insertion, résolu en 2 secondes

Vous pouvez lire un article que j'ai écrit auparavant, optimisant l'insertion de 20 W de données à la fois pour être complétée en 3 secondes
https://my.oschina.net/famous...

滿天的星座

Mon idée personnelle est la suivante : le point clé est de juger du poids et d'établir un index unique pour garantir l'unicité lors de l'import par lots, vous pouvez vous référer à la méthode de @石记.

刘奇

Sur la base de ce problème, il y a eu un gros problème lors de l'importation suivante, et l'importation des données était lente, j'ai donc écrit un article à ce sujet :

/a/11...

J'espère que quelqu'un pourra l'utiliser comme référence après l'avoir vu plus tard.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!