MySQL - Requête longue - Création d'index

Fermé
Callie33 Messages postés 139 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 4 novembre 2014 - 12 juin 2013 à 09:10
funnycat Messages postés 153 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 10 mars 2019 - 12 juin 2013 à 13:25
Bonjour tout le monde,

J'ai un table eod, avec plus de 1,5M de lignes, en voici un extrait :

| eod_id | company_symbol |    date    | open  | close | high  |  low  |
|      1 |            AAA | 01-01-2000 | 40.00 | 42.00 | 43.00 | 39.00 |


La requête suivante prend plus de 4 secondes à s'exécuter :

SELECT company_symbol,
  COUNT(CASE WHEN CLOSE < OPEN THEN 1 END) AS 'Green Days',
  COUNT(CASE WHEN OPEN < CLOSE THEN 1 END) AS 'Red Days',
  COUNT(volume) AS 'Volume'
FROM eod
GROUP BY company_symbol;
This is the result of the explain :


Résultat de l'explain :
id : 1
select_type : SIMPLE
table : eod
type : index
possible_keys : NULL
key : eos_cs_date
key_len : 57
ref : NULL
rows : 1536743


J'ai déjà les 2 index suivants de créés :

create index eod_date_close on eod(date, close);
create index eod_cs_date on eod(company_symbol, date);


Quel index devrais-je créer pour diminuer son temps d'exécution ?

Merci d'avance :)
A voir également:

1 réponse

funnycat Messages postés 153 Date d'inscription jeudi 12 février 2009 Statut Membre Dernière intervention 10 mars 2019 65
12 juin 2013 à 13:25
Bonjour.
Question très intéressante. A mon avis, vous allez devoir créé plusieurs index et tester à plusieurs reprises pour voir ce qui est le plus optimum.

Je ne connais pas la réponse à cette problématique. Mais à tout hasard, quel est le résultat du EXPLAIN et ya-t-il des gains de performance en créant 3 index : un pour "company_symbol", un autre pour "open" et un dernier pour "close"?

Et à quoi correspond "volume"?

Cordialement,
0