J'ai une appli avec accès natif MySQL.
Sur les tables fichiers la recherche avec loupe est très longue. A titre
d'exemple, une recherche avec la loupe de la réf. "B-3339" sur un fichier
articles contenant 100.000 enreg. prend environ 15 secondes... les
utilisateurs râlent bien sur.
Le problème vient du fait que j'ai un filtre sur le fichier positionné avec
le code suivant:
gFiltre = "IDTYPE = 4 et TERMINE = 0"
hFiltre(TABLE..FichierParcouru,TABLE..RubriqueParcourue,Caract(0),Caract(255
),gFiltre)
Ce filtre permet de sélectionner les article de type "article" (IDTYPE = 4)
toujours actifs (TERMINE = 0).
IDTYPE est indexé, TERMINE est non indexé. La rubrique de parcours REFCONST
est indexée.
Sans le filtre, la recherche s'effectue 2 fois plus vite (ce qui n'est pas
génial non plus d'ailleurs)
Voyez vous une solution pour que la recherche soit plus rapide ?
Je viens de faire des essais de positionnement sur la table fichier "articles" avec le code suivant
hlitrecherche(article,REFCONST,"B-3339") // Résultat instantané TableAffiche(article,tacourantpremier) // Prend 15 secondes !!!!
En fait, c'est le tableaffiche() qui met énormément de temps ! Et je ne connais pas d'autre focntion pour se positionner dans une table fichier :-( J'ai peur de devoir changer complètement de stratégie pour afficher les articles. A moins que vous ne voyez une solution pour afficher rapidement la table après un positionnement "manuel" ?!
si pas possible car poste distant, utilise Ethereal avec le filtre tcp.port == 3306
Si tu veux de la vitesse travaille avec des tables mémoires et passe par tes propres requêtes SQL.
Peux tu tester avec un outil Mysql, le temps d'une requête SELECT count(*) from article
-- suivre ce lien pour répondre: http://cerbermail.com/?2KrV3YZXnn Daniel ;-)
I.G.LOG a écrit :
Bonsoir
Je viens de faire des essais de positionnement sur la table fichier
"articles" avec le code suivant
hlitrecherche(article,REFCONST,"B-3339") // Résultat instantané
TableAffiche(article,tacourantpremier) // Prend 15 secondes
!!!!
En fait, c'est le tableaffiche() qui met énormément de temps !
Et je ne connais pas d'autre focntion pour se positionner dans une table
fichier :-(
J'ai peur de devoir changer complètement de stratégie pour afficher les
articles.
A moins que vous ne voyez une solution pour afficher rapidement la table
après un positionnement "manuel" ?!
Je viens de faire des essais de positionnement sur la table fichier "articles" avec le code suivant
hlitrecherche(article,REFCONST,"B-3339") // Résultat instantané TableAffiche(article,tacourantpremier) // Prend 15 secondes !!!!
En fait, c'est le tableaffiche() qui met énormément de temps ! Et je ne connais pas d'autre focntion pour se positionner dans une table fichier :-( J'ai peur de devoir changer complètement de stratégie pour afficher les articles. A moins que vous ne voyez une solution pour afficher rapidement la table après un positionnement "manuel" ?!
si pas possible car poste distant, utilise Ethereal avec le filtre tcp.port == 3306
Si tu veux de la vitesse travaille avec des tables mémoires et passe par tes propres requêtes SQL.
Peux tu tester avec un outil Mysql, le temps d'une requête SELECT count(*) from article
-- suivre ce lien pour répondre: http://cerbermail.com/?2KrV3YZXnn Daniel ;-)
I.G.LOG
> Branche les logs sur ta base
si pas possible car poste distant, utilise Ethereal avec le filtre tcp.port == 3306
Bonjour, Je vais essayer les logs et Ethereal (je ne connais ni l'un ni l'autre). J'ai déjà commencé à passer la table fichier en table mémoire: les performances sont incomparables, avec le code suivant pour afficher une page d'articles, c'est instantané:
TableSupprimeTout(TABLE) lCond = "select REFCONST,IDARTICLE,DESIGNATION from article where REFCONST >= '" + MoiMême + "' order by REFCONST limit 0," + TableOccurrence(TABLE,toVisible) SI SQLExec(lCond,"Req1") ALORS SQLTable("Req1",TABLE) FIN SQLFerme("Req1") TableSelectPlus(TABLE,1)
La difficulté reste maintenant de gérer la navigation avec l'ascenseur (plus compliqué si on veut remonter dans la table !!).
Peux tu tester avec un outil Mysql, le temps d'une requête SELECT count(*) from article
sur ma base locale (identique à celle de mon client) ca me donne: 1 ligne dans le résultat (0.01) sec J'essaie demain chez le client
Encore merci pour tes réponses
>
Branche les logs sur ta base
si pas possible car poste distant, utilise Ethereal avec le filtre
tcp.port == 3306
Bonjour,
Je vais essayer les logs et Ethereal (je ne connais ni l'un ni l'autre).
J'ai déjà commencé à passer la table fichier en table mémoire: les
performances sont incomparables, avec le code suivant pour afficher une page
d'articles, c'est instantané:
TableSupprimeTout(TABLE)
lCond = "select REFCONST,IDARTICLE,DESIGNATION from article where REFCONST
>= '" + MoiMême + "' order by REFCONST limit 0," +
TableOccurrence(TABLE,toVisible)
SI SQLExec(lCond,"Req1") ALORS
SQLTable("Req1",TABLE)
FIN
SQLFerme("Req1")
TableSelectPlus(TABLE,1)
La difficulté reste maintenant de gérer la navigation avec l'ascenseur (plus
compliqué si on veut remonter dans la table !!).
Peux tu tester avec un outil Mysql, le temps d'une requête
SELECT count(*) from article
sur ma base locale (identique à celle de mon client) ca me donne: 1 ligne
dans le résultat (0.01) sec
J'essaie demain chez le client
si pas possible car poste distant, utilise Ethereal avec le filtre tcp.port == 3306
Bonjour, Je vais essayer les logs et Ethereal (je ne connais ni l'un ni l'autre). J'ai déjà commencé à passer la table fichier en table mémoire: les performances sont incomparables, avec le code suivant pour afficher une page d'articles, c'est instantané:
TableSupprimeTout(TABLE) lCond = "select REFCONST,IDARTICLE,DESIGNATION from article where REFCONST >= '" + MoiMême + "' order by REFCONST limit 0," + TableOccurrence(TABLE,toVisible) SI SQLExec(lCond,"Req1") ALORS SQLTable("Req1",TABLE) FIN SQLFerme("Req1") TableSelectPlus(TABLE,1)
La difficulté reste maintenant de gérer la navigation avec l'ascenseur (plus compliqué si on veut remonter dans la table !!).
Peux tu tester avec un outil Mysql, le temps d'une requête SELECT count(*) from article
sur ma base locale (identique à celle de mon client) ca me donne: 1 ligne dans le résultat (0.01) sec J'essaie demain chez le client
Encore merci pour tes réponses
Daniel
I.G.LOG a écrit :
Branche les logs sur ta base
si pas possible car poste distant, utilise Ethereal avec le filtre tcp.port == 3306
Bonjour, Je vais essayer les logs et Ethereal (je ne connais ni l'un ni l'autre). J'ai déjà commencé à passer la table fichier en table mémoire: les performances sont incomparables, avec le code suivant pour afficher une page d'articles, c'est instantané:
TableSupprimeTout(TABLE) lCond = "select REFCONST,IDARTICLE,DESIGNATION from article where REFCONST >= '" + MoiMême + "' order by REFCONST limit 0," + TableOccurrence(TABLE,toVisible) SI SQLExec(lCond,"Req1") ALORS SQLTable("Req1",TABLE) FIN SQLFerme("Req1") TableSelectPlus(TABLE,1)
La difficulté reste maintenant de gérer la navigation avec l'ascenseur (plus compliqué si on veut remonter dans la table !!).
Peux tu tester avec un outil Mysql, le temps d'une requête SELECT count(*) from article
sur ma base locale (identique à celle de mon client) ca me donne: 1 ligne dans le résultat (0.01) sec J'essaie demain chez le client
Encore merci pour tes réponses
Tu es en InnoDb ou en MyISAM
-- suivre ce lien pour répondre: http://cerbermail.com/?2KrV3YZXnn Daniel ;-)
I.G.LOG a écrit :
Branche les logs sur ta base
si pas possible car poste distant, utilise Ethereal avec le filtre
tcp.port == 3306
Bonjour,
Je vais essayer les logs et Ethereal (je ne connais ni l'un ni l'autre).
J'ai déjà commencé à passer la table fichier en table mémoire: les
performances sont incomparables, avec le code suivant pour afficher une page
d'articles, c'est instantané:
TableSupprimeTout(TABLE)
lCond = "select REFCONST,IDARTICLE,DESIGNATION from article where REFCONST
>= '" + MoiMême + "' order by REFCONST limit 0," +
TableOccurrence(TABLE,toVisible)
SI SQLExec(lCond,"Req1") ALORS
SQLTable("Req1",TABLE)
FIN
SQLFerme("Req1")
TableSelectPlus(TABLE,1)
La difficulté reste maintenant de gérer la navigation avec l'ascenseur (plus
compliqué si on veut remonter dans la table !!).
Peux tu tester avec un outil Mysql, le temps d'une requête
SELECT count(*) from article
sur ma base locale (identique à celle de mon client) ca me donne: 1 ligne
dans le résultat (0.01) sec
J'essaie demain chez le client
Encore merci pour tes réponses
Tu es en InnoDb ou en MyISAM
--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
si pas possible car poste distant, utilise Ethereal avec le filtre tcp.port == 3306
Bonjour, Je vais essayer les logs et Ethereal (je ne connais ni l'un ni l'autre). J'ai déjà commencé à passer la table fichier en table mémoire: les performances sont incomparables, avec le code suivant pour afficher une page d'articles, c'est instantané:
TableSupprimeTout(TABLE) lCond = "select REFCONST,IDARTICLE,DESIGNATION from article where REFCONST >= '" + MoiMême + "' order by REFCONST limit 0," + TableOccurrence(TABLE,toVisible) SI SQLExec(lCond,"Req1") ALORS SQLTable("Req1",TABLE) FIN SQLFerme("Req1") TableSelectPlus(TABLE,1)
La difficulté reste maintenant de gérer la navigation avec l'ascenseur (plus compliqué si on veut remonter dans la table !!).
Peux tu tester avec un outil Mysql, le temps d'une requête SELECT count(*) from article
sur ma base locale (identique à celle de mon client) ca me donne: 1 ligne dans le résultat (0.01) sec J'essaie demain chez le client
Encore merci pour tes réponses
Tu es en InnoDb ou en MyISAM
-- suivre ce lien pour répondre: http://cerbermail.com/?2KrV3YZXnn Daniel ;-)
I.G.LOG
> Tu es en InnoDb ou en MyISAM
euh... j'ai 8 tables en innodb sur 61 en tout. je ne sais pas pkoi ces tables sont définies en innodb ! Est ce que c'est important, et dois je les définir en MyIsam ?
>
Tu es en InnoDb ou en MyISAM
euh... j'ai 8 tables en innodb sur 61 en tout. je ne sais pas pkoi ces
tables sont définies en innodb !
Est ce que c'est important, et dois je les définir en MyIsam ?
euh... j'ai 8 tables en innodb sur 61 en tout. je ne sais pas pkoi ces tables sont définies en innodb ! Est ce que c'est important, et dois je les définir en MyIsam ?
Daniel
I.G.LOG a écrit :
Tu es en InnoDb ou en MyISAM
euh... j'ai 8 tables en innodb sur 61 en tout. je ne sais pas pkoi ces tables sont définies en innodb ! Est ce que c'est important, et dois je les définir en MyIsam ?
En fait les tables innodb permettent de fonctionner en transactionnel et d'appliquer des règles d'intégrité.
Avantage de MyISAM très rapide mais pas de transactionnel Avantage de InnoDB sécurité des données, mais très lent (dans certains cas) si innodb
Un SELECT count(*) FROM table sur une table innodb avec plusieurs millions de lignes dépasse la minute lorsque le même sur MyISAM est immédiat.
Car pour faire un count(*), innodb doit balayer tout l'index!!!
Je pense que ton problème de lenteur vient de là, car Windev en automatique dans les tables envoie au moins 2 select count(*).
Attention sur myIsam, ou innodb un select count(*) from table Where condition est identique car on fait une recherche avant de calculer la valeur.
-- suivre ce lien pour répondre: http://cerbermail.com/?2KrV3YZXnn Daniel ;-)
I.G.LOG a écrit :
Tu es en InnoDb ou en MyISAM
euh... j'ai 8 tables en innodb sur 61 en tout. je ne sais pas pkoi ces
tables sont définies en innodb !
Est ce que c'est important, et dois je les définir en MyIsam ?
En fait les tables innodb permettent de fonctionner en transactionnel et
d'appliquer des règles d'intégrité.
Avantage de MyISAM très rapide mais pas de transactionnel
Avantage de InnoDB sécurité des données, mais très lent (dans certains
cas) si innodb
Un SELECT count(*) FROM table sur une table innodb avec plusieurs
millions de lignes dépasse la minute lorsque le même sur MyISAM est
immédiat.
Car pour faire un count(*), innodb doit balayer tout l'index!!!
Je pense que ton problème de lenteur vient de là, car Windev en
automatique dans les tables envoie au moins 2 select count(*).
Attention sur myIsam, ou innodb un select count(*) from table Where
condition est identique car on fait une recherche avant de calculer la
valeur.
--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
euh... j'ai 8 tables en innodb sur 61 en tout. je ne sais pas pkoi ces tables sont définies en innodb ! Est ce que c'est important, et dois je les définir en MyIsam ?
En fait les tables innodb permettent de fonctionner en transactionnel et d'appliquer des règles d'intégrité.
Avantage de MyISAM très rapide mais pas de transactionnel Avantage de InnoDB sécurité des données, mais très lent (dans certains cas) si innodb
Un SELECT count(*) FROM table sur une table innodb avec plusieurs millions de lignes dépasse la minute lorsque le même sur MyISAM est immédiat.
Car pour faire un count(*), innodb doit balayer tout l'index!!!
Je pense que ton problème de lenteur vient de là, car Windev en automatique dans les tables envoie au moins 2 select count(*).
Attention sur myIsam, ou innodb un select count(*) from table Where condition est identique car on fait une recherche avant de calculer la valeur.
-- suivre ce lien pour répondre: http://cerbermail.com/?2KrV3YZXnn Daniel ;-)
I.G.LOG
Merci pour ces renseignements. Mais ma table article est elle en MyIsam, donc la lenteur ne vient pas de là... Je pense plutot que c'est bien le TableAffiche() qui est en cause. Je suis en train de basculer l'affichage en table mémoire, et là, plus de lenteurs. Encore merci pour vos réponses
Merci pour ces renseignements.
Mais ma table article est elle en MyIsam, donc la lenteur ne vient pas de
là...
Je pense plutot que c'est bien le TableAffiche() qui est en cause. Je suis
en train de basculer l'affichage en table mémoire, et là, plus de lenteurs.
Encore merci pour vos réponses
Merci pour ces renseignements. Mais ma table article est elle en MyIsam, donc la lenteur ne vient pas de là... Je pense plutot que c'est bien le TableAffiche() qui est en cause. Je suis en train de basculer l'affichage en table mémoire, et là, plus de lenteurs. Encore merci pour vos réponses