Einzelnen Beitrag anzeigen

Gushiken

Registriert seit: 23. Jan 2007
12 Beiträge
 
#9

Re: array of records mit Daten aus SQL Query füllen

  Alt 27. Nov 2008, 13:52
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');
  Mit Zitat antworten Zitat