J'ai une requête qui tourne depuis samedi matin !
Contexte :
A partir de 2 tables sources :
- veaux (53 millions de lignes)
- bovins (35 millions de lignes)
J'ai d'abord importé dans une nouvelle base les veaux et la requête en question est censée ajouter à la nouvelle table les bovins qui ne sont pas déjà référencés parmi les veaux.
Il s'agit donc d'une requête INSERT avec une jointure entre une table temporaire issue de l'extraction de la nouvelle table (les veaux) et la table source des bovins.
Le volume à traiter est très gros sur un portable récent avec 2 Go de RAM.
Le processus MySQLd utilise 50% du processeur (double coeur) donc il semble tourner à plein régime.
Voici la requête :
La table des pays n'en contient que 18 et la table des races 63.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 INSERT INTO bdni2.bovins(B_NUM_NAT, B_SEXE, B_DAT_NAISS, B_DAT_PREM_VELAGE, B_FK_IND_PAYS, B_FK_IND_PAYS_NAISS, B_FK_IND_RACE, B_FK_COD_TEMOIN_NAISS) SELECT b.NUM_NAT, CASE WHEN b.SEXE = '' THEN NULL ELSE b.SEXE END, b.DATE_NAISS, b.DATE_PREM_VELAGE, p1.P_IND_PAYS, CASE WHEN b.COD_PAYS_NAISS = '' THEN NULL ELSE p2.P_IND_PAYS END, CASE WHEN b.TYP_RACE = '' THEN NULL ELSE r.R_IND_RACE END, b.TEMOIN_NAISS FROM bdni.bovins b INNER JOIN bdni2.pays p1 ON b.COD_PAYS = p1.P_COD_PAYS LEFT JOIN bdni2.pays p2 ON b.COD_PAYS_NAISS = p2.P_COD_PAYS LEFT JOIN bdni2.races r ON b.TYP_RACE = r.R_TYP_RACE WHERE CONCAT(b.COD_PAYS, '@', b.NUM_NAT) NOT IN ( SELECT CONCAT(P_COD_PAYS, '@', B_NUM_NAT) FROM bdni2.bovins2 )
Est-ce que j'attends la fin de la requête ou bien celle-ci est-elle en train de tourner en boucle pour finalement ne donner aucun résultat ?
Partager