Denis Beauregard
2014-10-15 00:59:24 UTC
Bonjour,
J'ai écrit un logiciel pour préparer une base de données
généalogiques. En gros, il insère dans une base SQL des
données de fichiers Excel et produit en bout de ligne des
pages web statiques pour consulter ces données. J'ai aussi
une version pour développement qui affiche directement telle
fiche.
Le système comprend plusieurs tables, de 200 000 à 700 000
enregistrements.
J'ai voulu optimiser une des opérations.
Une des tables contient 700 000 enregistrements et je faisais
un select qui prenait 15 secondes sur mon ordinateur portable
ou 2 sur mon ordinateur de tables. Le select était du genre
select table where no = 1234 and code like "a%"
J'ai d'abord remplacé le champ code de texte en varchar mais
cela n'a rien donné.
Ensuite, j'ai mis la donnée requise pour cette opération dans
une autre table (donc, ajout d'un champ) pour avoir plutôt
select table2 where no = 1234
Avant l'optimisation (sic), la génération d'une base html statique
se faisait en 2h 9 min 51 sec. Après, cela a pris 2h 10 m 56 sec !!!
C'est dingue ! J'ai enlevé une opération qui est faite 136 fois et
qui dure 2,1 secondes selon phpmyadmin (donc 4,76 minutes) et cela
prend 1 minute de plus et non 4 minutes de moins. Comme si en ajoutant
un champ, j'aurais ajouté 10 minutes au temps de traitement alors que
je lis cette table avec des select qui reposent sur des champs avec
index.
Optimiser ? Mais à quoi cela sert-il ?
Denis
J'ai écrit un logiciel pour préparer une base de données
généalogiques. En gros, il insère dans une base SQL des
données de fichiers Excel et produit en bout de ligne des
pages web statiques pour consulter ces données. J'ai aussi
une version pour développement qui affiche directement telle
fiche.
Le système comprend plusieurs tables, de 200 000 à 700 000
enregistrements.
J'ai voulu optimiser une des opérations.
Une des tables contient 700 000 enregistrements et je faisais
un select qui prenait 15 secondes sur mon ordinateur portable
ou 2 sur mon ordinateur de tables. Le select était du genre
select table where no = 1234 and code like "a%"
J'ai d'abord remplacé le champ code de texte en varchar mais
cela n'a rien donné.
Ensuite, j'ai mis la donnée requise pour cette opération dans
une autre table (donc, ajout d'un champ) pour avoir plutôt
select table2 where no = 1234
Avant l'optimisation (sic), la génération d'une base html statique
se faisait en 2h 9 min 51 sec. Après, cela a pris 2h 10 m 56 sec !!!
C'est dingue ! J'ai enlevé une opération qui est faite 136 fois et
qui dure 2,1 secondes selon phpmyadmin (donc 4,76 minutes) et cela
prend 1 minute de plus et non 4 minutes de moins. Comme si en ajoutant
un champ, j'aurais ajouté 10 minutes au temps de traitement alors que
je lis cette table avec des select qui reposent sur des champs avec
index.
Optimiser ? Mais à quoi cela sert-il ?
Denis