OVH Cloud OVH Cloud

[MySQL] Améliorer la vitesse pour les parcours

27 réponses
Avatar
Romain PETIT
Bonjour,

en pleine phase d'étude pour un transfert HF7->MySQL avec les accès
(alter)natifs, je suis au premier abord un peu déçu par la vitesse des
parcours de fichier :

NOMTEST est une clé texte sur 20 (avec doublon)
parcours de 147 enregistrements sur 8286
Les 2 bases sont sur la même machine (XP SP1) et accédée via le réseau
par la machine de développement (XP SP1).
MySQL version 4.020a-nt-max

***********Code HF
c=0
HRAZ(TEST)
HFiltre(TEST,NOMTEST,"INR","INR")
HLitPremier(TEST,NOMTEST)
TANTQUE PAS HEnDehors
c++
Trace(c+" -"+TEST.NOMTEST)
HLitSuivant(TEST,NOMTEST)
FIN

***********Code MySQL (via SQLManagerX)
c=0
oTEST:SQLRaz()
oTEST:SQLfiltre("NOMTEST='INR'")
oTEST:SQLPremier()
TANTQUE PAS oTEST:endehors
c++
Trace(c+" -"+oTEST:m_NOMTEST)
oTEST:SQlSuivant()
FIN

HF -> en moyenne 1 sec 20
MySQL -> en moyenne 5 sec 40

HF est 4 à 5 fois plus rapide...
Bien sûr, je concois que ce n'est pas la bonne façon pour utiliser
MySQL et évidemment, je vais dans un second temps tester une
programmation plus adapté à un vrai moteur SGDB mais y-a-t-il quand
même un moyen d'améliorer ce type de parcours (j'ai beaucoup de
parcours dans une appli que je voudrais migrer) ?

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)

7 réponses

1 2 3
Avatar
jacques
Romain PETIT a exprimé avec précision :
ted a pensé très fort :
Il y a effectivement qlq différences, mais pas tout à re-écrire !!



Donc autant utiliser les accès alter, il ne faut pas tout réécrire non plus,
probablement un peu plus, mais au moins on maîtrise ce que l'on fait.

- Requête multi-fichier : Les fonctions HAjoute, HModifie et HSupprime
ne sont pas supportées.


Tu as souvent se type de code ? Personnelement jamais.



C'est pourtant bien pratique, quitte à avoir un *vrai* SGDB, autant essayer
de l'utiliser correctement :
http://dev.mysql.com/doc/mysql/fr/UPDATE.html

"
Depuis MySQL version 4.0.4, vous pouvez aussi faire des opérations de UPDATE
qui couvrent plusieurs tables :
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

L'exemple ci-dessus montre une jointure interne, en utilisant la virgule
comme séparateur, mais une commande UPDATE multi-table peut utiliser
n'importe quel type de jointure autorisée dans une commande SELECT, tel qu'un
LEFT JOIN.
"

- Les recherches réalisées sur certaines requêtes complexes avec la
fonction HLitRecherche* peuvent échouer dans cette version.
Ce problème sera corrigé dans une prochaine version (sic !)





Etonnant peut être un reste de doc des premières versions, je vais envoyer
une email au ST gratuit pour confirmation.



Pas la peine, on se doute de la réponse : WD7.5 n'est plus supporté...

A+



bonjour,
ça marche aussi avec la 4.0.2
UPDATE ARTICLE, MATABLETEMP
SET ARTICLE.QTESTK = MATABLETEMP.QTE
WHERE ARTICLE.ID_ART = MATABLETEMP.ID_ART ;


;o)

--
Jacques TREPP
AlbyGest

enlever _pasdespam pour me joindre
Avatar
Romain PETIT
jacques avait prétendu :

ça marche aussi avec la 4.0.2



Hum, 4.0.20 tu veux dire ? (je m'était trompé dans mon post précédent
, je suis bien en 4.0.20 et non
4.0.2... ;-) et même 4.1.3b depuis peu...)

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Roumegou Eric
Romain PETIT a utilisé son clavier pour écrire :
jacques avait prétendu :

ça marche aussi avec la 4.0.2



Hum, 4.0.20 tu veux dire ? (je m'était trompé dans mon post précédent
, je suis bien en 4.0.20 et non
4.0.2... ;-) et même 4.1.3b depuis peu...)


la 4.1 n'est hélas pas encore la version de prod.
mais pourquoi est-ce si long pour proclamer cette version en prod ? car
elle apporte ce que beaucoup attendent.

A+



--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Roumegou Eric a couché sur son écran :

Mhouais ! pas d'accord avec toi là dessus Romain.
quitte à avoir un *vrai* SGDB, autant essayer d'utiliser un code SQL le plus
standard possible.
Car comment utiliser ce code en Oracle car je doute que cela marche ?



Ce n'est pas faux mais je serai étonné que cela ne fasse pas partie du
SQL99...
Au fait, peut-on trouver quelque part un document sur la
standardisation, au moins pour le SQL92 ?

Ceci dit, le principe d'une standardisation est intéressant mais c'est
souvent malheureusement au détriment de la performance.
A fortiori, si j'ai besoin de performance avec des fonctions
non-standard, je ne me priverai pas...

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
jacques
Romain PETIT avait prétendu :
jacques avait prétendu :

ça marche aussi avec la 4.0.2



Hum, 4.0.20 tu veux dire ? (je m'était trompé dans mon post précédent
, je suis bien en 4.0.20 et non
4.0.2... ;-) et même 4.1.3b depuis peu...)



exact !
serveur en 4.0.20a
client en 4.0.12, hélas, puisque le client 4.0.18 ou 4.0.20 plantent
toujours à l'ouverture de mysql4WD 1.5.5.5 :'(

--
Jacques TREPP
AlbyGest

enlever _pasdespam pour me joindre
Avatar
ted
Romain PETIT écrivait
news::

Salut,

- Requête multi-fichier : Les fonctions HAjoute, HModifie et
HSupprime ne sont pas supportées.


Tu as souvent se type de code ? Personnelement jamais.



C'est pourtant bien pratique, quitte à avoir un *vrai* SGDB, autant
essayer de l'utiliser correctement :
http://dev.mysql.com/doc/mysql/fr/UPDATE.html




Tu confonds les choses....
Les requetes de modifications mono ou multi-tables FONCTIONNENT TRES
BIEN.
La limitation concerne une requete SELECT, sur laquelle on ferait un
HModifie (sur le résultat de la requete). Cette partie là est moins
standard, elle est proposée sur HF (un plus), mais pas sur les autres
bases...


Etonnant peut être un reste de doc des premières versions, je vais
envoyer une email au ST gratuit pour confirmation.



Pas la peine, on se doute de la réponse : WD7.5 n'est plus supporté...




Si tu ne communiques pas avec le ST gratuit et si tu ne prends pas les
évolutions il est clair que tu va trouver des limitations, et plus le
temps va avancer plus tu en trouveras, comme avec tout autre produit
(informatique ou pas d'ailleur).
Bon on dérive, il n'y a plus vraiment de pb technique ici...


--
En esperant t'avoir aidé.
ted
Avatar
Romain PETIT
ted a exprimé avec précision :

Tu confonds les choses....
Les requetes de modifications mono ou multi-tables FONCTIONNENT TRES
BIEN.



Ah ? Je ne comprend pas : selon l'aide, l'accès natif ne fonctionne
qu'avec la version 3.23, version de MySQL qui ne supporte par les
update multi-tables...

La limitation concerne une requete SELECT, sur laquelle on ferait un
HModifie (sur le résultat de la requete). Cette partie là est moins
standard, elle est proposée sur HF (un plus), mais pas sur les autres
bases...



Tu as un exemple en HF ?

Etonnant peut être un reste de doc des premières versions, je vais
envoyer une email au ST gratuit pour confirmation.



Pas la peine, on se doute de la réponse : WD7.5 n'est plus supporté...





Si tu ne communiques pas avec le ST gratuit et si tu ne prends pas les
évolutions



Passe en WD8, oui, on connaît...
Je parie que dans 6 mois, le refrain va être le même, un 9 remplaçant
le 8.

Bon on dérive, il n'y a plus vraiment de pb technique ici...



La charte de ce forum ne limite pas les discussions uniquement à des
problèmes techniques.

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
1 2 3