Das Grid bremst das ganze zwar schon deutlich, etwas über eine Minute, aber auch ohne die Visualisierung im Grid bemötige ich noch durchschnittlich 3-4 Minuten.
Das Grid wird im übrigen auch später nicht mehr benötigt. Es geht hauptsächlich um die Erstellung des Arrays.
Zitat von
gsh:
Zitat von
Gushiken:
Die 100.000 Datensätze einzulesen ist nötig um bei einer Suche nach einer Person nicht jedes mal wieder eine
SQL Abfrage starten zu müssen. Die Suche im Array geht wesentlich schneller als die Suche in der
DB per
SQL. (Eine Suche nach 3 Buchstaben innerhalb eines Namens dauert bei 100.000 Datensätzen im Array mit Ausgabe im Grid ca 50ms)
hmm
imho ist eine datenbank eigentlich für genau solche abfragen da.
Außerdem glaube ich (Bei einem richtigen
SQL Server) ist die Suche in der
DB auf jedenfall schneller.
Also bei meiner
MySQL Datenbank brauch ich für eine Vergleichbare Abfrage circa 3 ms.
Die Abfrage an sich ist schneller. Allerdings muss man die Daten erstmal zur Datenbank hinbekommen, zurückholen und verarbeiten. Ich habs zwar selbst nicht getestet, aber meinem Ausbilder (ja, ich bin noch ein FIT in der Ausbildung *schäm*) meinte das eine Personensuche bei einer Tabelle mit ca 100.000 Datensätzen schnell 20s dauert, inkl. Verarbeitung und Anzeige im Grid.
Zudem verwenden wir einen
MSSQL Server der, soweit ich weiß, ne ganze Ecke langsamer ist als
MySQL.
Aber wie groß war die Datenbank denn wenn die Abfrage bloß 3ms dauert?? Und hattest du LEFT JOIN's in der Abfrage? Hier mal die 'echte'
SQL Abfrage:
Delphi-Quellcode:
query.sql.add('
SELECT '+
'
p.name,'+
'
p.vorname,'+
'
p.id,'+
'
s.bezeichnung as strasse,'+
'
p.hausnr,'+
'
o.bezeichnung as ort,'+
'
o.plz as plz,'+
'
day(p.geburtsdatum) as tag,'+
'
month(p.geburtsdatum) as monat,'+
'
year(p.geburtsdatum) as jahr,'+
'
p.debitoren_nr as personenktonr'+
'
FROM personen as p'+
'
LEFT JOIN strassen as s ON s.id = p.strassen_id'+
'
LEFT JOIN orte as o ON o.id = p.orte_id'+
'
WHERE p.sys_delete = '+QuotedStr('
F')+
'
ORDER BY name');