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:
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
);
Voici mes index:
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 ma requête:
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
Et voici quelques valeurs:
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);
La requête devrait me retourner les intervalles manquants, à savoir:
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