Une différence de vitesse entre SQL et Access que je ne comprends pas. [Résolu]

Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
- - Dernière réponse : 4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
- 17 août 2011 à 12:01
Bonjour à tous,

J'ai repris un code vb6 pour des bases de données Access.

Les bases de données sont faites que une base de donnés a une table. Exemple, base de données « A » à une seule table « a » ainsi de suite. Tous les champs des tous les table sauf les ID sont des strings.

Le code vb6 ouvre toutes les bases et tables au début puis les fermes à la fin (objet DAO). La recherche de valeur ce fait par le listing de tout la table. Une fois que l'on la trouvé dans la table « a » en la liste dans la table « b » ainsi de suite.

En ma demandé de refaire le code sous vb6 en gardant la structure de base de donnée mais pour MSSql.

J'ai donc exporté toute les DB Access dans mon MS SQL. J'ai refait le code sous forme de requêtes. J'ouvre la base de donnée et sa table uniquement dans la fonction qui on a besoin et je la referme. Vu la disposition des table je suis obligé (je crois) de réfère la requête sur la table « b » ainsi de suite.

Malgré tout je suis épaté par le fait que ma version aye plusieurs seconde de retard que la version Access. C vraiment évidant et je ne vois pas pour quoi.

Cela est-il du au fait que j'ouvre trop souvent la connexion ?
Cela est-il du fait que la structure des bases soit stupide ?
Access est-il plus rapide que MySQL ?
Bien que les tables soient tout dans des bases différentes, puis-je tout de même faire des jointures ?

Bien sur je me suis remis en cause (C tjrs par là que je commence). J'ai refait plusieurs fois les fonctions. Mais avant de demander à refaire tout le concept des bases de données, je voudrais avoir votre avis.

Merci.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
1
3
Merci
Oui, il faut juste maintenir ta connexion.

On peut faire des jointures entre 2 bases. Tu te connectes à une base puis tu fais une requête SQL qui fait la jointure avec une autre. Par exemple si tu es connecté à la base A et que tu veux une jointure sur la base B :

Select ta.*, tb.*
from a ta, B..b tb
where ta.x = tb.y

Cette syntaxe fonctionne en Sybase, pour MySql ce sera peut-être différent.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 133 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ed73
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
1
0
Merci
Bonjour,

En général on se connecte à la base une seule fois au lancement du logiciel et on ferme la connexion à la fin.

Ensuite, la structure est en effet vraiment stupide, quel peut bien être l’intérêt d'avoir une base pour une table ?

Je pense que si tu regroupais le tout dans une seule base, ça irait bien mieux.
Commenter la réponse de ed73
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Merci de ta réponse.
Tu me demande "quel peut bien être l’intérêt d'avoir une base pour une table ? " Je ne sais pas

Par contre tu me dis "général on se connecte à la base une seule fois au lancement du logiciel et on ferme la connexion à la fin". Si je te comprend bien quand je dois chercher une nouvelle valeur je fais un MaRecordSet.execute (Objet ADO) tout simplement ?

Une dernière question. Peut-on faire une jointeur entre deux table de deux db diff. ?
Commenter la réponse de 4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Merci pour tout
Commenter la réponse de 4u4me4us