Bonjour,
J'aurais besoin d'aide pour la création d'une table, de ses index et la requête SQL associée dans le cadre d'une utilisation avec MySQL 5.7 sous Windows.
Cette table contient plusieurs dizaine de millions d'enregistrements.
Voici la table:
Voici mes index:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE IF NOT EXISTS `TABLE1` ( `REF1` VARCHAR(16) NOT NULL, `REF2` VARCHAR(16) NOT NULL, `REF3` VARCHAR(3) NOT NULL, `OPEN` BIGINT NOT NULL, `CLOSE` BIGINT NOT NULL );
Et voici ma requête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE UNIQUE INDEX `I_1_2_3_OPEN` ON `TABLE1`(`REF1`,`REF2`, `REF3`,`OPEN`); CREATE INDEX `I_3` ON `TABLE1`(`REF3`); CREATE INDEX `I_1_2_3` ON `TABLE1`(`REF1`,`REF2`, `REF3`); CREATE INDEX `I_1_2_3_OPEN_CLOSE` ON `TABLE1`(`REF1`,`REF2`, `REF3`, `OPEN`, `CLOSE`);
Et voici quelques valeurs:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT (a.close + 1) AS start, (a.open) AS start2, (min(b.open)-1) AS end FROM table1 AS a, table1 AS b WHERE b.open > a.open AND a.ref1='XXXX' AND a.ref2='YYYY' AND a.ref3='ZZZZ' AND b.ref1='XXXX' AND b.ref2='YYYY' AND b.ref3='ZZZZ' GROUP BY a.open HAVING (end - start) > 0
La requête devrait me retourner les intervalles manquants, à savoir:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520514900000,1520514959999); INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520514960000,1520515019999); INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520515020000,1520515079999); INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520515140000,1520515199999); INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520515200000,1520515259999); INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520515260000,1520515319999); INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520515320000,1520515379999); INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520515380000,1520515429999); INSERT INTO TABLE1 (REF1,REF2,REF3,OPEN,CLOSE) VALUES ('CAC40','HBK','1HR',1520515440000,1520515499999);
START-START2-END
1520515080000-1520515080000-1520515139999
1520515380000-1520515430000-1520515440000
Malgré la création de mes index, cette requête est trèèèèèèèès longue.
L'objectif de cette table est de stocker les valeurs de différents actifs. L'objectif de la requête est de trouver les "gaps" entre les instants d' "ouverture" et de "fermeture" de chaque valeur.
Verriez vous un moyen de l'améliorer ?
Merci beaucoup (d'avance) !
Mehdi
Partager