Delphi Requête ADO
Est-il un moyen plus rapide de faire une itération sur un ADO Dataset que
while (not ADOQuery1.Eof) do
begin
/* Do something */
ADOQuery1.Next;
end;
J'ai besoin d'analyser un ensemble de données de près de 9000 articles et extraire les enregistrements correspondant à un ensemble prédéfini de la branche des nombres.
OriginalL'auteur Pieter van Wyk | 2010-02-22
Vous devez vous connecter pour publier un commentaire.
Il est beaucoup plus rapide à utiliser ADORecordset pour de telles tâches:
Vous avez raison, mais le contrôle de jeu d'enregistrements directement est beaucoup plus rapide, parce que dataset n'pleins d'autres trucs qui ralentit itération.
Ce sera un peu un boost de vitesse, mais probablement pas autant que ne pas avoir à effectuer une itération sur un nombre d'enregistrements dans la première place.
Eh bien, 9000 - pas beaucoup de documents, mais je suis prêt à parier que le jeu d'enregistrements serait mieux dataset au moins 4 fois.
Cela dépend aussi de la DisableControls comme l'a noté Neftali. ADO ensembles de données sont très lents, si elle n'est pas appelée. Il est seulement nécessaire si vous avez des données des contrôles liés.
OriginalL'auteur Linas
Assurez-vous que vous utilisez DisableControls/EnableControls si il n'est pas nécessaire pour ne pas passer du temps à mettre à jour les contrôles visibles associées au jeu de données.
Ce qui concerne.
Merci pour le lien, Gerry.
OriginalL'auteur Germán Estévez -Neftalí-
@Pieter, deux options
1) vous pouvez modifier votre phrase sql avant d'exécuter, en ajoutant la condition qui correspondent à l'ensemble pré-défini de la branche des nombres.
2) à l'aide de la Filtre propriété de TAdoQuery.
Cette réponse suppose qu'un filtrer les données au niveau de db. J'ai couru dans de nombreuses situations où le filtrage implique des appels à une méthode d'application et ne peut simplement pas être fait avec une clause where.
OriginalL'auteur RRUZ
Supplémentaires gains de performance peut être faite en évitant les comparaisons de chaînes jusqu'à ce que le plus tard possible (quand tout le reste des matchs). Si vous avez un grand nombre de doubles chaînes dans votre base de données, puis envisager de placer vos chaînes dans un tableau distinct, lié à la première table par un nombre entier.
OriginalL'auteur skamradt
Delphi ADO trucs (
TADOQuery
ouTADOTable
) n'est pas mauvaise, elle est terrible (vérifié avec Delphi XE2 /2007). A l'exportation de données à partir de Transbase tables ODBC (pilote) de MySQL par le biais de fichiers sql et Navicat. Pour la table, avec près de millions d'enregistrements, il faut beaucoup d'heures par ADO (8 millions d'enregistrements de la table était à 10% fait au bout de 2 jours), à quelques minutes en utilisantTQuery
(mais peut se bloquer en raison de BDE bugs avec de grandes tables, BDE n'a pas été mis à jour à 15 dernières années), plusieurs minutes de pureODBC
ou Navicat.Mon conseil: utiliser quoi que ce soit à la place d'ADO (au moins jusqu'à ce que sérieusement remaniée par les développeurs).
OriginalL'auteur user2091150
Vous pouvez modifier la requête pour inclure une clause SQL where, quelque chose comme
Je voudrais aussi vous suggère fortement de regarder vers l'avant uniquement, en lecture seulement les curseurs pour donner la plus grande augmentation de la vitesse.
OriginalL'auteur Darian Miller