Bonjour à Tous,
Bien qu'ayant parcouru plusieurs discussion à ce sujet, je n'ai pas trouvé de réponse à mon problème. Je me permet donc de solliciter le forum en quête d'une aide. Le titre donne déjà le ton de ma demande mais je vais essayer de détailler au mieux possible ma situation.
Mon EDI : Delphi 10.2
Ma Base : Microsoft access *.mdb (375Mo), dans le même répertoire que l'application. Utilisation en Local. Ordinateur i5-6200U / 16Go de RAM
Dans mon application
Un AdoConnection : Microsoft Jet 4.0
Un AdoQuery : Pour le test, j'ai utilisé les deux configurations (clUseClient et clUseServer), rien d'autre sinon que la connexion
Un dataSource : Rien de particulier à dire
Un DBGrid : tout en valeur par défaut
Un bouton pour lancer ma requête
Le code de ma requête
La table vers laquelle je pointe comporte 545558 enregistrements et pourra grossir significativement. Chaque enregistrement comporte une dizaine de champs (string et integer pas de Blob)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 procedure TFEN_Principale.Button2Click(Sender: TObject); Var Start : Integer; begin Start := GetTickcount; if Edit2.Text <> '' then Begin Edit1.Text := 'Requête en cours....'; Screen.Cursor := crSQLWait; Application.ProcessMessages; DM_Principale.QRY_DetailDatalog.DisableControls; With DM_Principale do Begin QRY_DetailDatalog.Active := False; QRY_DetailDatalog.SQL.Clear; QRY_DetailDatalog.SQL.Add(Edit2.Text); QRY_DetailDatalog.Active := True; End; DM_Principale.QRY_DetailDatalog.EnableControls; End; Screen.Cursor := crDefault; Edit1.Text := IntToStr(GetTickCount-Start); end;
Pour mesurer la vitesse j'utilise 3 requêtes. Chaque requête est lancée 5 fois pour estimer le temps. Chaque requete a été lancée avec le cursor Location dans les deux choix possibles. Ci-apresles temps en ms pour chaque test
Requête 1 : SELECT * FROM Principale (545558 enregistrements)
clUseClient clUseServer 1 151 406 219 2 150 813 203 3 174 250 172 4 151 656 203 5 152 037 172
Requête 2 : SELECT DISTINCT MySite FROM Principale (2 Enregistrements)
clUseClient clUseServer 1 152 703 79 422 2 215 515 160 578 3 207 484 195 375 4 182 296 151 280 5 154 297 144 406
Requête 3 : SELECT * FROM Principale WHERE MySite LIKE "KAN" (365190 enregistrements)
clUseClient clUseServer 1 147 672 142 000 2 160 438 151 765 3 207 484 113 031 4 182 296 148 234 5 154 297 147 797
On en arrive à la question. Ces résultats sont ils normaux selon vous? 150 secondes pour obtenir un résultat sur une base en local?
Est-ce une erreur dans mon utilisation du composant ADO ?
Quelle alternative me proposés vous ?
Merci pour votre aide
Partager