|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Inscription : février 2004 Messages : 49 ![]() |
Salut,
Voila mon pb: J'ai un table "T1" qui à environ 1,5 million de lignes et les colonnes suivantes : IDENT(texte) DONNEES(texte) EVENT(num) DATE(date) Il n'y a pas de clé primaire. Il y a plusieurs enregistrement avec le même IDENT. J'ai créé les index suivants : IDENT DATE EVENT IDENT + EVENT + DATE IDENT + EVENT Je cherche les données (DONNEES) du dernier enregistrement (selon DATE) pour un identifiant donné (IDENT) et un lot d’événements (EVENT). J'ai donc pondu cette requête : Code :
Mais en fonction de l'identifiant que je rentre j'ai des temps de réponse carrément anarchiques. Par exemple pour l'identifiant "toto" qui à 38000 lignes la requête s’exécute en 0,3 secondes tandis que pour l’identifiant "titi" qui à 3500 lignes elle met 20 secondes !!!? Comment ça se fait d'après vous?? |
||
|
|
00
|
|
|
#2 | |
![]() ![]() |
Si tes IDENT font moins de 256 caractères, passe la colonne en VARCHAR.
Comment as-tu créé l'index sur la colonne IDENT ? Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : février 2004 Messages : 49 ![]() |
En fait mon IDENT est déjà un varchar(100).
Par contre je n'ai pas précisé la longueur lorsque j'ai créé l'index (avec phpmyadmin) mais dans les faits tous mes IDENT font 10 caractères pour le moment. Pense tu qu'il faut que je re-crée l'index en précisant la longueur? |
|
|
00
|
|
|
#4 | |
![]() ![]() |
Citation:
Peut-être aussi que l'absence de clé primaire est préjudiciable.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Inscription : février 2004 Messages : 49 ![]() |
Alors,
J'ai supprimé puis recréé l'index sur le IDENT en précisant la longueur (100 car ils ne font que 10 pour le moment mais ça vas changer). J'ai aussi ajouté une colonne ID en auto-incrément et clé primaire. Mais tout cela n'a rien changé..... J'ai lancé une défragmentation de la table avec Phpmyadmin pour voir ... Je vous tend au courant. |
|
|
00
|
|
|
#6 |
![]() ![]() |
On peut avoir le résultat de l'EXPLAIN de ta requête ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Inscription : février 2004 Messages : 49 ![]() |
Après un silence de quelques jours, je reviens à la charge pour vous donner ma solution.
J'ai fait des tests dans tous les sens, avec des clé primaires, des FORCE INDEX, avec un ORDER BY ASC et DESC, sans le LIMIT, des OR à la place du IN, etc... Résultat, toujours pareil les temps de réponse sont complètements aléatoires! ![]() Mais je me suis aperçus que mes table étaient en INNODB (je ne savais même pas ce que ça voulait dire). Je me suis un peut renseigner sur internet pour comprendre les différences entre INNODB et MYISAM pour finalement m’apercevoir que comme je n'utilise pas de transaction, je n'ai pas besoin que mes table soit en INNODB. Et qu'en plus les SELECT "complex" sont plus rapide en MYISAM. ![]() J'ai donc passé mes tables en MYISAM et ... Oh miracle, les temps de réponse sont de quelques millisecondes! Voila, en espérant que ça servira à quelqu'un d'autre ... Merci. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Il y a bien d'autres différences entre MyISAM et InnoDB, notamment les recherches FULL-TEXT non supportées en InnoDB qui, par contre, implémente les FOREIGN KEYS.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
Copyright © 2000-2012 - www.developpez.com