Bonjour à tous !!!
J'ai (encore) un problème de requête MySQL à vous montrer.
Tout d'abord mon schéma (simplifié)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 Les 3 Tables importantes CREATE TABLE T_PARRES ( PARRES_ID INTEGER NOT NULL, PARRES_MEASURE_DATE TIMESTAMP NOT NULL, MONPAR_ID INTEGER NOT NULL, ) TYPE=INNODB; CREATE TABLE T_MONPAR( MONPAR_ID INTEGER NOT NULL, CXR_ID INTEGER NULL ) TYPE=INNODB; CREATE TABLE T_CXR( CXR_ID INTEGER NOT NULL, ) TYPE=INNODB; Les Primary Keys ALTER TABLE T_CXR ADD ( PRIMARY KEY (CXR_ID) ) ; ALTER TABLE T_MONPAR ADD ( PRIMARY KEY (MONPAR_ID) ) ; ALTER TABLE T_PARRES ADD ( PRIMARY KEY (PARRES_ID) ) ; Les Foreign keys ALTER TABLE T_PARRES ADD CONSTRAINT fk_paramres_monparid FOREIGN KEY (MONPAR_ID) REFERENCES T_MONPAR(MONPAR_ID) ; ALTER TABLE T_MONPAR ADD CONSTRAINT fk_monparam_cxrid FOREIGN KEY (CXR_ID) REFERENCES T_CXR(CXR_ID) ; Les index CREATE INDEX IND_PARRES_MEASURE_DATE ON T_PARRES ( PARRES_MEASURE_DATE ASC ); CREATE INDEX IND_PARRES_MONPAR_DATE ON T_PARRES ( MONPAR_ID ASC, PARRES_MEASURE_DATE ASC );
Maintenant, la requête posant problème :
- Pour un cxr_id donné, et pour une fourchette de temps (en date) donnée, je voudrais les 1000 + récents objets T_PARRES
Donc j'ai effectuée une requête comme ceci :
Explain me gratifie d'un superbe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select all_columns from T_PARRES r inner join T_MONPAR m on m.monpar_id = r.monpar_id where r.parres_measure_date between '2010-01-01' and '2010-01-15' and m.cxr_id = 145 order by r.parres_measure_date desc limit 1000;
Using filesort, using temporary.
Je sais que cela provient du "order by" mais je vois pas d'autre moyen de faire pour récupérer les 1000 PARRES les plus récents :/
Les charges des tables : (à peu près)
- T_PARRES : entre 10 000 000 & 100 000 000 lignes
- T_MONPAR : entre 100 000 & 500 000 lignes
- T_CXR : entre 4000 & 7000
Toutes vos remarques, conseils sont les bienvenus, merci ^^
PS : "select *" je sais select * c'est pas bien, mais c'était pour le test![]()
Partager